我有一个网络应用程序。
有时我会通过智能卡和 PKCS11 进行一些数据签名。 由于 Java 可以访问连接到计算机的设备,因此我使用由我的网络应用程序启动的小程序。
到目前为止,我想要签名的数据(以及其他一些东西)是通过作为小程序参数提供的 base64 编码字符串发送到小程序的。然后在小程序中,在用户向智能卡提供密码后,传递给小程序的数据被签名并发送回主网络应用程序。
我通过以下方式读取传递给应用程序的数据:
String dataToDecode = this.getParameter("paramStr");
...
在扩展 JApplet 的类中。
一切正常,直到我签署了单个文档。
现在新需求来了,我需要一次性签署~100份文件。
调整 java 代码以处理许多文档,但是当我尝试对数据签名时,小程序崩溃,没有任何错误、任何符号、任何异常,什么也没有,控制台窗口消失。 请看编辑 1
- 我尝试通过运行时参数增加 JAVA 可用的内存量,例如:-Xmx2048m,但没有帮助。
- 通过反复试验,我达到了正确处理约 15 份文档的上限。
- 当我检查没有小程序的应用程序时,只是从 Netbeans 运行,我可以毫无问题地签署 100 个文档的数据,但我在测试期间从文件中读取了 base64 编码的数据。
我怀疑当我尝试通过读取超过 ~10 MB 的数据时发生崩溃
JApplet.getParameter("paramStr");
我的问题是:
- JApplet 的 getParameter 方法有大小限制吗?
- 如何检测/记录导致崩溃的原因?
- 对于在这种情况下如何处理大量数据,您有什么建议吗?
谢谢你的帮助
编辑 1:
在我的评论中,我说过我确信 JVM 会崩溃。 现在我发现它不是。
由于某些与 PKCS11 初始化/applet 和 JVM 相关的原因,我将 System.Exit(0) 放在 try/catch/finally 的 finally block 中。我通常会避免这样做。
我修改了代码...并没有崩溃,简单的方法
JApplet.getParameter("paramStr")
当大量数据传入时返回 null 然后我有异常。 很抱歉在我的第一个问题中“愚弄”了你。我不知道这一点。
所以现在的主要问题是: JApplet.getParameter("paramStr") 可以处理的数据量是否有限制?
谢谢
最佳答案
也可能是由于浏览器错误。我建议尝试调试它是没有意义的 - 只需通过 applet 的 HTTP 从服务器请求数据来回避问题。
关于java - JApplet.getParameter 在向其传递大量数据时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018867/