Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过URL数据嵌入Java小程序_Java_Html_Applet_Base64 - Fatal编程技术网

通过URL数据嵌入Java小程序

通过URL数据嵌入Java小程序,java,html,applet,base64,Java,Html,Applet,Base64,我试图探索嵌入HTML Java小程序的URL数据功能 对于HTML标记实例化java小程序的文档,并没有排除这个选项,但我似乎无法解决这个问题 我使用(object和applet)有不同的HTML标记值变体,我认为接近我目标的是: <object type="application/x-java-applet" width="100" height="100"> <param name="archive" value="data:application/java-arch

我试图探索嵌入HTML Java小程序的URL数据功能

对于HTML标记实例化java小程序的文档,并没有排除这个选项,但我似乎无法解决这个问题

我使用(object和applet)有不同的HTML标记值变体,我认为接近我目标的是:

<object type="application/x-java-applet" width="100" height="100">
  <param name="archive" value="data:application/java-archive;base64,BASE64_OF_JAR"/>
  <param name="code" value="test.class"/>
  <h1>not working</h1>
</object>

不起作用
这种变化会导致一个带有文本“name”的IlegalArgumentException。我点击浏览器上的错误图标来检查这一点。在java控制台上,整个堆栈跟踪是:

java.net.MalformedURLException: unknown protocol: data
        at java.net.URL.<init>(Unknown Source)
        at java.net.URL.<init>(Unknown Source)
        at sun.plugin.util.ProgressMonitorAdapter.setProgressFilter(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager.setupProgress(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
java.net.MalformedURLException:未知协议:数据
位于java.net.URL。(未知源)
位于java.net.URL。(未知源)
位于sun.plugin.util.ProgressMonitorAdapter.setProgressFilter(未知源)
位于sun.plugin2.applet.Plugin2Manager.setupProgress(未知源)
位于sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(未知源)
位于java.lang.Thread.run(未知源)
是否有人知道如何做或不可能做到这一点?


PS:有一个例子说明了如何通过Oracle在HTML中嵌入JNLP,即使HTML标准允许,JRE通常也不理解base64编码的数据。

for OBJECT元素允许内嵌数据,Oracle的小程序实例化也允许这样做。执行的测试显示Java浏览器插件(来自Oracle)和中的可用源代码表明该实现不支持它

在这种情况下,浏览器是否支持它似乎无关紧要,因为Object/Applet HTML元素中资源引用的资源处理是由浏览器插件执行的

另一种方法是使用applet反序列化,使用的OBJECT属性通过URL数据序列化。正如HTML4规范中提到的,对APPLET和OBJECT属性没有积极的支持,JRE似乎也不支持从URL数据进行对象反序列化

简而言之,JRE在代码、对象和归档HTML属性中不支持base64反序列化

还有一个关于JRE1.4.1中URL数据支持的BUG没有实现

我在64位Windows计算机上使用JRE7进行的测试结果如下:

  • 通过URL数据将JAR传递给ARCHIVE属性会导致Applet2Manager.loadJarFiles()中出现IllegalArgumentException
  • 通过URL数据将类传递给代码属性会导致Applet2ClassLoader.findClass()中出现ClassNotFoundException
  • 通过URL数据将序列化小程序传递到对象属性会导致Plugin2ClassLoader.getResourceAsResource()中出现FileNotFoundException

不得不承认前几天我没有仔细阅读这篇文章&错过了最后一个链接。有趣的是,JNLP可以用Base64编码。如果将
数据:应用程序/java存档
数据:应用程序/x-java-archive
交换,会发生什么?这是相同的例外。插件处理程序似乎无法识别数据URL,如果能看到插件的源代码就好了:)完整的例外:你能将stacktrace编辑到问题中吗?还可以在其上使用代码格式。顺便说一句,我试图在这里设置一个本地测试,结果是。SNAFU!;)好吧,你现在已经学会了“不排除”并不意味着“确实包括”:一个优秀的答案,通过有用的链接进行了充分的研究。但愿我能不止一次投票。