Filter应用之2-设置某些页面缓存或是不缓存

要想让所有浏览器不缓存页面,需要在每个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"> :指定网页在缓存中的过期时间,一旦网页过期,必须到服务器上重新调阅。

原文地址:https://www.cnblogs.com/lihaoyang/p/7380344.html