2010-04-22 70 views
8

我遇到了一个我部署的拒绝缓存在jvm的“粘性”缓存(或浏览器)中的Java applet问题。由于某种原因,每当用户加载此小程序所在的页面时,jvm会从服务器重新下载jar文件,这会导致很长的延迟。Java Applet无法缓存

包含applet的网页被经由因特网访问,因此根据Sun's Java applet documentation我使用<applet>标签而不是<object><embed>标签。

任何帮助调试或识别问题将不胜感激。

下面是我使用的是全小程序标记:

<applet alt="Scanning Applet failed to load" archive="scanning.jar" 
     code="scanning.scanlet.class" codebase="/java/" codetype="application/java" 
     height="30" mayscript="True" name="scanlet" width="200"> 
    <param name="domain" value="192.168.12.23" /> 
    <param name="publishName" value="scan_attachment" /> 
    <param name="publishURL" value="http://192.168.12.23/draft/update/52" /> 
    <param name="curURL" value="http://192.168.12.23/draft/edit/52" /> 

Your browser is unable to process the Java &lt;APPLET&gt; tag needed to display this applet 
<br /> 
One solution would be to download a better web browser like 
<a href="http://www.mozilla.com/firefox">Mozilla's Firefox</a> 

</applet> 
+0

我已经启用日志和跟踪通过Java控制面板 - >高级 - >调试,我得到了以下消息的许多迭代: 网络:未找到缓存项[url:http ://192.168.12.23/java/scanning.jar,版本:1.0] – 2010-04-22 21:32:16

+0

一般StackOverflow问题:是否没有办法格式化“评论”像最初的问题一样好? – 2010-04-22 21:33:24

回答

1

这位官员介绍了如何可以改变你的APPLET标记,以增加高速缓存:

http://java.sun.com/products/plugin/1.3/docs/appletcaching.html

+0

乔恩,thx为快速反应,不幸的是我已经上下了官方文件。据说,因为我只是使用了archive属性,所以即使没有新的cache_ *属性,我也应该得到某种回退浏览器级别的缓存,对吧? – 2010-04-22 21:08:32

+0

无论如何,在将cache_ *属性添加到我的applet标记中后,该applet仍然拒绝被jvm缓存: ...相同的参数等。 2010-04-22 21:35:35

+0

那么,这个“后备浏览器级别缓存”仍然由JVM完成,通常是问题 – ArtemGr 2010-04-24 06:32:55

2

个人而言,我解决了通过使用cache_archive和cache_version参数来缓存问题,文档编号为http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/applet_caching.html

我的ca che_version基于实际的文件修改日期,例如,

val archive = libs.map("/" + _.getPath).mkString (", ") 
val version = libs.map(_.getUpdated/1000/20 - 59281420).mkString (", ") 

,并与MSIE的工作,它看起来如下:

if (msie) { 
    cms write <OBJECT 
    classid="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA" 
    codebase="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab" 
    width="100%" height="100%"> 
    ... 
    <PARAM name="cache_archive" value={archive}/> 
    <PARAM name="cache_version" value={version}/> 
    </OBJECT> 
} else { 
    cms write <applet ... 
    cache_archive={archive} cache_version={version}></applet> 
} 
+0

ArtemGr,thx的详细响应。我们所有的用户都通过Firefox访问该站点,因此无法使用。我的小应用程序标签包含cache_ *属性(_archive,_option,&_version),但是每当我浏览回有问题的页面时,小程序仍然在重新下载 这里是我修改后的Applet标签: < applet cache_archive =“scanning.jar”cache_option =“Plugin”cache_version =“1.0”code =“scanning.scanlet.class”codebase =“/ java /”codetype =“application/java”height =“30”mayscript =“True “name =”scanlet “width =”200“> ...相同的参数等。 – 2010-04-22 21:28:53

+0

这是否仅仅发生在您身上或者是否发生在网站的所有(某些)用户身上?如果前者,那么可能是因为某些原因,计算机上的Java插件无法缓存该文件?在Windows上,Java插件可以在浏览器缓存中进行缓存,在这种情况下,浏览器缓存限制可能适用(您可以通过控制面板查看缓存的内容)。在UNIX上使用〜/ .java/deployment /文件夹来进行缓存,〜/ .java /应该是可写的等等。 – ArtemGr 2010-04-23 15:00:30

+0

每个使用该站点的人都会遇到这种情况:[。在Windows计算机上,我查看了Java控制面板,只能找到“缓存”设置在Temporary Internet Files-> Settings下。这些设置虽然都很好看。我也在Temporary Internet Files-> View下查看,以验证问题中的.jar文件不存在于缓存中:[ – 2010-04-23 20:45:12

4

我有同样的问题,发现需要被应用服务器端的一招。看起来,如果他们的mime类型不正确,那么jar就不会被缓存。请使用application/java-archive MIME类型检查您的服务器回复。

我发现的另一个问题是与特定的jar有关。我的存档参数列出了很多jar,但只有少数被缓存。我发现所有罐子都达到了一个特定的罐子,其余的罐子都没有被缓存。 加载小程序时,我在其java控制台中按下“5”,并在刚刚上一次缓存的jar:cache:signed项从jar中丢失后发现此消息。我仍然不知道这个文件有什么问题,但是我在归档参数列表的末尾移动了那个jar文件。这个“固定”的问题。

1

对我来说,我不得不从归档变量删除Jar文件,只是有它在cache_archive参数,并指定版本,这样,它不捎带到服务器进行最后修改日期

固定它在我的火狐