我正在尝试设置一个项目,以便不缓存静态资源。.css和.js。我们似乎有一些内部缓存问题,我希望这能解决问题。
我已经安装了一个阶段监听器,基本上是这个http://turbomanage.wordpress.com/2006/08/08/disable-browser-caching-in-jsf/的稍微修改版本。
我的类:
package com.ods.common.jsf.phaselistener;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletResponse;
public class CacheControlPhaseListener implements PhaseListener
{
public PhaseId getPhaseId()
{
return PhaseId.RENDER_RESPONSE;
}
public void afterPhase(PhaseEvent event)
{
}
public void beforePhase(PhaseEvent event)
{
FacesContext facesContext = event.getFacesContext();
HttpServletResponse response = (HttpServletResponse) facesContext
.getExternalContext().getResponse();
response.setHeader("Cache-control", "no-cache"); // HTTP 1.1
response.setHeader("Cache-control", "no-store"); // HTTP 1.1
response.setHeader("Cache-control", "must-revalidate"); // HTTP 1.1
// response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setHeader("Allow", "GET"); // Allowing GET Method only
response.setHeader("Allow", "POST");// Allowing POST Method only
response.setDateHeader("Expires", -1); // prevent caching at the proxy server
/*what I've added*/
response.setHeader("Pragma", "no-cache");
response.setHeader("Content-type", "x-javascript");
//below are the content types I'm seeing for the css/js assets via Firebug
response.setHeader("Content-type", "application/x-javascript");
response.setHeader("Content-type", "text/css");
}
}
我对faces-config.xml的添加:
<lifecycle>
<phase-listener id="nocache">com.ods.common.jsf.phaselistener.CacheControlPhaseListener</phase-listener>
</lifecycle>
我的.xhtml页面在过去得到了一个过期的头部:
Expires Thu, 01 Jan 1970 00:00:00 GMT
所以这似乎有些起作用...我假设这个日期是来自Expires -1(将其设置为Unix纪元)。
正如您所看到的,我尝试为一些JavaScript和CSS设置适当的内容类型标头,但这些资产的到期日期是未来一周。
有人有什么想法吗?另外,我是前端开发人员,不是后端Java人员。我可以玩Java,但我绝对不是Java开发人员。这也是我第一次使用JSF,因此尽可能简单易懂会很好 :)
@WebFilter(urlPatterns={"*.js","*.css"})
。 - BalusCweb.xml
注册。有关具体示例,请参见http://stackoverflow.com/tags/servlet-filters/info。 - BalusCjavax.faces.application.Resource
的工作。我建议注册一个覆盖自定义Resource
处理的ResourceHandler
。另请参见自定义ResourceHandler
和Mojarra 实现。 - YoYoFacesServlet
。 - BalusC