如何强制 Java Applet 从缓存中加载

Posted

技术标签:

【中文标题】如何强制 Java Applet 从缓存中加载【英文标题】:How to force a Java Applet to Load out of Cache 【发布时间】:2011-05-14 18:06:10 【问题描述】:

我和我的朋友正在开发一个小游戏,我们想与我们的朋友分享开发阶段。所以我做了这个小页面http://people.scs.carleton.ca/~manders8/game.html

现在它是我们正在更新的一个 .class 文件。但由于某种原因,它总是加载旧版本。我知道有一种方法可以关闭 Java 缓存,但我的朋友们并不那么称职。另外,要让人们玩您的游戏,它应该超级简单,并且不需要像屏幕截图那样的 5 步来尝试它。

我有这个是标签:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">

因为我认为它可能与浏览器有关,但没有帮助。

这是我的代码

<applet code="com.murderbody.prototype.TitleScreen.class" codebase="http://people.scs.carleton.ca/~manders8/content/" width=640 height=380></applet>

从小程序改为:

<object type="application/x-java-applet;version=1.5"  >
     <param name="codebase" value="http://people.scs.carleton.ca/~manders8/content/">
     <param name="code" value="com.murderbody.prototype.TitleScreen.class">
     <param name="cache_option" value="no">
</object>

【问题讨论】:

【参考方案1】:

在你的 Applet 标签中添加这个:&lt;param name="cache_option" value="no"&gt;

说到 Applet 标签,它们已经过时多年了;考虑改用object tag。

【讨论】:

【参考方案2】:

Java 小程序的缓存可能发生在两个级别:浏览器和 Java 插件。您的问题似乎与插件有关。我刚刚发现了这个:

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

有些人使用的一种方法是资源版本控制,即为每个版本生成一个新的小程序文件名(最好将小程序打包在一个 jar 文件中并为每个新版本重命名该 jar,例如 titlescreen-1.2.23.jar) .如果您有一个不错的构建工具(ant、maven)可以在 JAR 和标签级别为您自动重命名,那就更好了。

【讨论】:

【参考方案3】:

这些标签可以防止页面被缓存。但是,小程序是独立的。 :)

您需要配置服务器以将这些标头与类文件本身一起发送(如果可能,请调查.htaccess 支持)。

如果这不可行,但您可以访问 php 或某些服务器端脚本语言,则可以使用以下内容:

<applet code="com.murderbody.prototype.TitleScreen.class?<?php echo rand(1, 10000);?>" codebase="http://people.scs.carleton.ca/~manders8/content/" width=640 height=380></applet>

编辑:另外,R. Bemrose 有一个好主意。尝试将此添加到小程序标签:

<param name="cache_option" value="no">

如果这最终成为解决方案,请务必接受他的回答:)

【讨论】:

以上是关于如何强制 Java Applet 从缓存中加载的主要内容,如果未能解决你的问题,请参考以下文章

图像在 iframe 中加载后未从缓存中加载

即使超过缓存控制年龄限制,值也会从缓存中加载

React Apollo 从缓存中加载数据然后发出请求

从缓存中加载 webview

无法从缓存 okHttp 和改造中加载数据

如何强制浏览器刷新网页的缓存版本