在GWT App中停止浏览器脚本缓存

时间:2010-08-04 16:30:44

标签: gwt browser caching

我在客户的机器上部署了一个GWT应用程序。作为一个持续的 随着发展,我们必须发布新的改进版本 申请时不时。我们每次发布新版本时都会 经常遇到客户端浏览器缓存的问题 旧脚本脚本有一段时间它表现得像数据一样笨拙 试图与之合作并不完全兼容。是什么 克服这个问题的最佳方法。目前我要告诉用户 清除浏览器的缓存以获得新版本,但这样会很好 他们不必这样做。

2 个答案:

答案 0 :(得分:15)

可能的解决方案取决于您托管应用程序的方式。如果您直接从servlet容器托管,那么您可以使用servlet过滤器,如下所述:

http://seewah.blogspot.com/2009/02/gwt-tips-2-nocachejs-getting-cached-in.html

以下是来自tadedon库的适当过滤器:

http://code.google.com/p/tadedon/source/browse/tadedon-servlet/src/main/java/com/xemantic/tadedon/servlet/CacheDisablingFilter.java

http://code.google.com/p/tadedon/source/browse/tadedon-servlet/src/main/java/com/xemantic/tadedon/servlet/CacheForcingFilter.java

这里是guice ServletModule,它可以为整个guice Web应用程序启用它们:

http://code.google.com/p/tadedon/source/browse/tadedon-gwt/src/main/java/com/xemantic/tadedon/gwt/http/GwtHttpCachingModule.java

如果你在tomcat前面使用一些反向代理,它会更简单。如果是apache(例如mod_proxy,mod_jk),并假设所有应用程序资源(html,图形,java脚本,css等)都放在apache上,只需在apache配置中设置这些选项:

<Files *.nocache.*>
  ExpiresDefault "access"
</Files>

<Files *.cache.*>
  ExpiresDefault "now plus 1 year"
</Files>

这里描述:

http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html

<完美缓存中的

部分。此类部署方案假定只有rpc请求应通过反向代理到tomcat。如果由于某些原因将所有应用程序上下文代理到tomcat,您仍然可以使用apache的LocationMatch指令而不是Files指令。

答案 1 :(得分:14)

默认情况下,浏览器应缓存大部分应用,直到构建过程生成新版本的应用为止。

了解GWT引导模型可能有助于理解其工作原理。

客户端请求的第一个脚本your-app-name.nocache.js未缓存,除了检查浏览器的用户代理和功能外,它什么都不做,并对相关应用程序JS发出第二个请求。

此时,如果之前已请求过,则应由浏览器缓存它请求的脚本。这是{indistinguisable-numbers-and-letters}.cache.html文件。

重新部署应用程序时,将执行nocache.js文件,并从服务器请求另一个cache.html文件,该文件不会出现在缓存中,但会被缓存浏览器下载后。

您是否正在使用延迟绑定或服务器上的缓存标头执行任何异常操作?这可能会导致您的nocache.js文件被缓存,这会使它从浏览器缓存中请求旧的cache.html