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=*.jspapp

<!-- 控制缓存的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天eclipse

@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里有这几句话,若是是想要设置缓存几天,必定要去掉,不然设置无效。jsp

<meta http-equiv="pragma" content="no-cache">:禁止浏览器从本地机的缓存中调阅页面内容
<meta http-equiv="cache-control" content="no-cache">:指定请求和响应遵循的缓存机制
<meta http-equiv="expires" content="0"> :指定网页在缓存中的过时时间,一旦网页过时,必须到服务器上从新调阅。ide

相关文章
相关标签/搜索