【问题标题】:How to make client load new html page with new java applet如何使客户端使用新的 Java 小程序加载新的 html 页面
【发布时间】:2012-11-15 07:49:21
【问题描述】:

如何让客户端的浏览器使用新的 java 小程序加载新版本的 html 页面?

我们在现场更新了一个系统,但是当客户端连接到 Web 服务器时,仍然显示旧的 Java 小程序(来自缓存)。

如何强制(最好从服务器端)客户端加载新版本,而不是从缓存中加载新版本?

旧系统(升级前):

  • 老linux版本(10年以上)
  • 旧的 apache 网络服务器(超过 10 年)
  • 旧的java小程序(单独的类文件)(大约2岁)
  • 网络服务器根目录中的旧 index.html(大约 2 岁)

新系统(升级后):

  • 与旧系统相同的 IP 地址和端口
  • windows xp 嵌入式
  • apache/2.2.21 (win32) 网络服务器
  • jar 文件中的新 java 小程序(所有与旧版本不同的类名)
  • 网络服务器根目录中的新 index.html

用户在 Windows XP 机器上使用 Chrome

当用户在 Firefox 中加载页面时,新的 java 小程序会显示并完美运行。 (他从来没有在firefox中加载过旧的java小程序)

[编辑]

将 looper 中的行添加到我的 httpd.conf 并没有导致任何错误,但我不确定它是否也能正常工作......

我似乎无法重现我的客户端的缓存问题:当我在小程序中更改某些内容并从另一台计算机再次加载它时,没有任何变化,但是当我在几分钟后重新加载时,它确实显示了新版本.. 没有或没有那些带有 CacheDisable 的额外行

当我在 httpd.conf 中搜索“缓存”时,我发现的只是:

#LoadModule cache_module modules/mod_cache.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule mem_cache_module modules/mod_mem_cache.so

所以似乎没有启用缓存?

当我自己添加带有 CacheDisable 的行(没有 IfModule)时,Apache 不想启动,所以它可能会损坏 httpd.conf?

[编辑2]

由于服务器操作系统、web服务器、java类名以及除index.html之外的所有文件名都与旧版本不同,所以一定是缓存的index.html是问题的原因。 我将 FrancescoMM 的回答中的元标记添加到我的 index.html 中,希望这能防止未来版本出现问题

【问题讨论】:

  • @zch :旧系统不使用 jar 文件(所有单独的类文件),新系统确实使用 jar 文件,因此您可以说 jar 文件具有不同的名称(并且jar 文件中的类名也与旧类不同)

标签: java html apache google-chrome windows-xp-embedded


【解决方案1】:

如果java类不同,那么索引文件就是缓存中的那个。也可能是客户端代理缓存,所以在服务器上操作没有结果。

最快的解决方案是给客户端发送一个新的url:

http://www.site.com/index.html?random_param=1234
http://www.site.com/?random=1234
http://www.site.com/?1234
http://www.site.com/?new

甚至只是

http://www.site.com/?

应该够了。

编辑

另外,您是否尝试将所有 pragma no cache 和到期日期元标记添加到 HTML 页面?这应该告诉客户端代理重新加载页面。

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">

请注意,EXPIRES 故意设置为旧日期。这一次可能解决不了你的问题,好像没有加载新的索引,没有人(服务器、代理、客户端)会看到新的标签,但会确保下次每次加载页面。

【讨论】:

  • 是否会将新的索引文件放入用户的缓存中?这将是更新缓存的好方法(无需引导用户通过浏览器设置)
  • 我曾经对缓存非常困难的 Flash 内容执行此操作:转到 site.com/?new 按 CTRL+F5(在 Windows PC 上)然后转到 site.com?按 CTRL+F5 然后转到site.com 按CTRL+F5。这通常会永远修复它。
  • 谢谢!!那些元标记应该做我认为的工作(从我在文档中看到的)......虽然现在不能测试它......但我认为你找到了问题的原因:旧的 index.html 被读取从缓存中,那个 index.html 仍然引用旧的类文件..所以当 index.html 不再从缓存中读取时,我的新 applet jar 文件将被加载.. 或者至少应该加载! :)
【解决方案2】:

除非您设置了允许小程序根据服务器指令使自己失效的功能,否则您必须从客户端进行重置。根据提供的信息,应该清除浏览器上的缓存。每个浏览器都有一种清除缓存的方法。我认为没有比这更短的方法了。

每个系统在首次部署时都会变成遗留系统。计划升级总是一个好主意。至少,任何进行服务器通信的小程序都应该向服务器报告其版本号,使服务器能够拒绝服务、开始升级、通知用户或任何其他适当的操作。

【讨论】:

  • 这就是我们这次所做的:通知用户,并引导他通过菜单清除缓存......虽然我们可能并不总是知道谁在使用它,所以我们不能总是通知大家,我认为每当我们有更新时让他们清除缓存不是很友好
  • 不是它不是特别友好,这就是人们开发自动更新方法的原因。我不确定正确的解决方案是否适用于小程序,但几乎可以肯定它涉及一些 JavaScript 和 AJAX 调用来检查当前版本。进入小程序沙箱后,您将无能为力。
  • ...也就是说,假设将来在服务器端重命名 JAR 对您不起作用。
  • 我忘了提:我喜欢你关于报告版本号的评论,但我无权访问服务器代码....我的小程序通过 tcp 端口与一些服务器通信(获取来自流量控制器的数据,向它们写入数据/指令)......我的小程序与之通信的流量控制器中的进程不是我的..在同一 IP 地址上运行的旧小程序也不是我的,我安装删除旧计算机(硬件)安装一个新的操作系统和我的 html 和 jar 文件的新计算机.. 除了 IP 地址和 index.html 的文件名之外,一切都发生了变化
  • 旧的小程序也不应该工作:所有的类都从服务器上消失了(甚至是全新的操作系统和网络服务器版本)....相互通信也发生了变化(旧的小程序通过共享mem,通过 tcp 端口的新小程序)...
【解决方案3】:

只需在 httpd.conf 中强制 Apache 中的 no-cache。

来自 apache 文档:

<IfModule mod_cache.c>
    CacheDisable /local_files
</IfModule> 

您可以指定小程序文件的完整路径,而不是禁用所有本地文件的缓存。

【讨论】:

  • 这将如何影响客户端缓存,更不用说已经缓存了旧响应的缓存了?
  • @looper : 周一会有新系统,然后测试一下
  • @looper :它没有用,但是 +1 的努力和帮助,谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 2010-12-25
相关资源
最近更新 更多