zoukankan      html  css  js  c++  java
  • 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"> :指定网页在缓存中的过期时间,一旦网页过期,必须到服务器上重新调阅。

  • 相关阅读:
    nginx能访问html静态文件但无法访问php文件
    LeetCode "498. Diagonal Traverse"
    LeetCode "Teemo Attacking"
    LeetCode "501. Find Mode in Binary Search Tree"
    LeetCode "483. Smallest Good Base" !!
    LeetCode "467. Unique Substrings in Wraparound String" !!
    LeetCode "437. Path Sum III"
    LeetCode "454. 4Sum II"
    LeetCode "445. Add Two Numbers II"
    LeetCode "486. Predict the Winner" !!
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/7380344.html
Copyright © 2011-2022 走看看