Java Applet 不缓存

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2694069/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-29 22:23:12  来源:igfitidea点击:

Java Applet not caching

javacachingapplet

提问by John Fogerty

I'm having a problem with a Java applet I've deployed that is refusing to be cached in the jvm's "sticky" cache (or by the browser). For some reason every time a user loads the page this applet is on, the jvm re-downloads the jar file from the server which causes a long delay.

我部署的 Java 小程序出现问题,该小程序拒绝缓存在 jvm 的“粘性”缓存(或浏览器)中。出于某种原因,每次用户加载此小程序所在的页面时,jvm 都会从服务器重新下载 jar 文件,这会导致很长的延迟。

The webpage containing the applet is being accessed via the internet, so according to Sun's Java applet documentationI'm using an <applet>tag rather than an <object>or <embed>tag.

包含小程序的网页是通过 Internet 访问的,因此根据Sun 的 Java 小程序文档,我使用的是<applet>标签而不是<object>or<embed>标签。

Any help debugging or identifying the problem would be much appreciated.

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

Below is the full applet tag I'm using:

下面是我正在使用的完整小程序标签:

<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>

回答by eppesuig

I had the very same problem and found a trick that need to be applied server side. It seems that jars aren't cached if their mime type is incorrect. Please check your server reply using the application/java-archive mime type.

我遇到了同样的问题,并发现了一个需要在服务器端应用的技巧。如果 jar 的 mime 类型不正确,它们似乎不会被缓存。请使用 application/java-archive mime 类型检查您的服务器回复。

Another problem I found is related to a specific jar. My archive parameter was listing many jars, but only a few were cached. I found that all jars upto a specific one where cached, all remaining jars weren't cached at all. While loading applet, I pressed "5" in its java console and found this message just after the last cached jar: cache: signed entry missing from jar . I still don't know what is wrong with this file, but I moved that jar at the end of the archive parameter list. This "fixed" the problem.

我发现的另一个问题与特定的 jar 有关。我的存档参数列出了许多 jar,但只有少数被缓存。我发现所有 jars 都缓存到一个特定的 jars,所有剩余的 jars 根本没有缓存。在加载小程序时,我在它的 Java 控制台中按下了“5”,并在最后一个缓存的 jar 之后发现了这条消息: cache: signed entry missing from jar 。我仍然不知道这个文件有什么问题,但我在存档参数列表的末尾移动了那个 jar。这“修复”了问题。

回答by ArtemGr

Personally I solved the caching issues by using cache_archive and cache_version parameters docummented at http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/applet_caching.html

我个人通过使用http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/applet_caching.html 上记录的cache_archive 和 cache_version 参数解决了缓存问题

My cache_version is based on the actual file modification date, e.g.

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

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

and to work with MSIE it looks as:

并与 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>
}

回答by Patrick Ecord

For me I had to remove the Jar files from the Archive tag and just have it in the cache_archive parameter, and specify the versions that way it doesn't piggy back to the server for last modified date

对我来说,我必须从 Archive 标签中删除 Jar 文件,并将其放在 cache_archive 参数中,并指定版本,这样它就不会在最后修改日期捎带回服务器

Fixed it in firefox for me

在 Firefox 中为我修复了它

回答by Jon Onstott

This official article describes how you can change your APPLET tag to increase caching:

这篇官方文章描述了如何更改 APPLET 标签以增加缓存:

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

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