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

  • 相关阅读:
    PHP双向队列
    [转]数据库查询的3个优化方法
    MySQL性能测试工具 mysqlslap
    PHP各种魔术方法测试
    VBA中级班课时3小结
    VBA中级班课时1小结
    执行cmd并返回程序结果
    Update Dataset data back to Database
    终于会用c#中的delegate(委托)和event(事件)了
    c#: Enqueued event for Queue<T>
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/7380344.html
Copyright © 2011-2022 走看看