要想让所有浏览器不缓存页面,需要在每个jsp上加上:
<% response.setHeader("expires","-1"); response.setHeader("pragma","no-cache"); response.setHeader("cache-control","no-cache"); %>
测试,新建一个cache.jsp: 加上了上边的三句话后,用IE查看缓存,没有cache.jsp的缓存。但是每个页面都加这这代码,有点麻烦,分析:可以通过一个过虑器,对所有*.jsp过虑,设置三个头,全部不缓存。这样就不需要再每个jsp页面都写上边的三个头了。
第一步:实现过虑器接口
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //转换 HttpServletResponse resp = (HttpServletResponse) response; resp.setHeader("expires","-1"); resp.setHeader("pragma","no-cache"); resp.setHeader("cache-control","no-cache"); //都放行 chain.doFilter(request, response); }
第二步:配置过虑器,url-pattern=*.jsp
<!-- 控制缓存的Filter --> <filter> <filter-name>cache</filter-name> <filter-class>com.lhy.filter.CacheFilter</filter-class> </filter> <filter-mapping> <filter-name>cache</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
第三步:设置对某些页面缓存N天
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //转换 HttpServletResponse resp = (HttpServletResponse)response; //设置页面缓存时间 //日历 Calendar c = Calendar.getInstance(); //加2天 c.add(Calendar.DATE,2); long time = c.getTimeInMillis(); resp.setDateHeader("expires", time); // resp.setHeader("pragma","no-cache"); // resp.setHeader("cache-control","no-cache"); //都放行 chain.doFilter(request, resp); }
注意:我用的myeclipse生成的jsp,head里有这几句话,如果是想要设置缓存几天,一定要去掉,否则设置无效。
<meta http-equiv="pragma" content="no-cache">:禁止浏览器从本地机的缓存中调阅页面内容
<meta http-equiv="cache-control" content="no-cache">:指定请求和响应遵循的缓存机制
<meta http-equiv="expires" content="0"> :指定网页在缓存中的过期时间,一旦网页过期,必须到服务器上重新调阅。