Java小程序依赖项多次提取



我目前正在研究的Web应用程序嵌入<applet>,它有几个依赖项(.jar文件(。

Applet标签看起来像这样:

<applet ...
        type="application/x-java-applet"
        codebase="/webapp/applet">
     ...
     <param name="codebase" value="./applet"/>
     <param name="archive" value="a.jar,b.jar,c.jar"/>
     <param name="codebase_lookup" value="false"/>
</applet>

Applet工作正常,但问题是,当它第一次加载时,这些a.jar、b.jar、c.jar等被从web服务器MANY(20-300(次请求(和下载(,每次都很慢。

发生了什么,是不是每个加载的类都会分别重新下载jar?

是否有适当优化/配置小程序的方法?尝试了几个缓存技巧(比如<param name="cache_archive" />,但没有成功,甚至不确定这是解决这个问题的正确方法

NB!这个小程序是WS客户端(具有一些JAXB注释的类和相关依赖项(。


Applet登录启动有很多这样的功能:

network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
... ~100 more times a.jar is downloaded
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/b.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/b.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/c.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/a.jar with proxy=DIRECT
network: Connecting http://127.0.0.1:7001/webapp/applet/c.jar with proxy=DIRECT
...

Web服务器访问日志反映小程序日志:

127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 
127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 
127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 
...
127.0.0.1 - "GET /webapp/applet/a.jar HTTP/1.1" 200 1232582 

之所以会发生这种情况,是因为在CXFURL.openStream()用于访问来自jar的不同资源(模式、wsdls等(。

通过用类加载器中的getResourceAsStream()方法替换URL.openStream()解决了问题(显然Applet2ClassLoader.getResource().openStream()进行了不必要的连接,而Applet2ClassLoader.getResourceAsStream()没有(。

更新:它似乎正在处理Java7插件,但不是Java6插件。

最新更新