如何在新部署后清除缓存?

时间:2014-04-22 12:57:12

标签: java jsf caching jboss browser

我正在使用JSF2.0 / Primefaces 4.0和JBoss 7开发应用程序。

问题是每次我进行新的部署(使用.war)时,所有用户都必须清理浏览器缓存以查看更改(主要是图像定位)。

我知道浏览器会保存页面内容以使其运行更快,但我也知道有一种方法可以控制HTTP参数cache-control以使其重新验证页面。

问题是:如何让客户端浏览器识别出有新的部署并清理存储的缓存?当然,使用JBoss 7。

此外,我不想在每次访问时重新验证缓存,只有在有新内容时才会重新验证 部署。

这可能吗?

2 个答案:

答案 0 :(得分:3)

如果是正在缓存的css文件,则可以使用此代码将版本添加到css文件中。这样您就不必自己维护版本了。

<h:outputStylesheet>
@import url('/someFolder/resources/css/page.css?v=${applicationInfoBean.projectVersion}')
</h:outputStylesheet>  

其中applicationInfoBean.projectVersion是我自己的bean和返回当前项目版本的方法。

另一种方法是更改​​ResourceHandlers缓存资源的时间。默认时间为一周。你可以在Mojarra中改变它:

<context-param>
    <param-name>com.sun.faces.defaultResourceMaxAge</param-name>
    <param-value>28800000</param-value> <!-- 8 hours. --> 
</context-param>

在MyFaces中:

<context-param>
    <param-name>org.apache.myfaces.RESOURCE_MAX_TIME_EXPIRES</param-name>
    <param-value>3628800000</param-value> <!-- 6 weeks. -->
</context-param>

答案 1 :(得分:2)

我建议使用 JSF资源库中的构建,该机制支持资源的版本控制。由于客户端缓存将在其“&#39;路径变化。这样您就可以更改资源的版本号,并敦促客户端重新加载它们,而不必处理任何缓存老化策略。

在SO

上有关于此主题的几篇好文章