好记性不如烂笔头36-利用java过滤器禁止浏览器缓存

来源:互联网 发布:阿里云虚拟主机 根目录 编辑:程序博客网 时间:2024/05/06 23:58

很多的应用,需要缓存文件提升性能;而很多的应用,最好禁止浏览器使用缓存,因为他们需要的数据最好能够及时体现。比如我们的统一采编维平台,如果修改的数据是缓存过的,那非把采编人员搞疯了不可。因此,这样的系统中,所有的页面最好都要禁用缓存。

1、 用JAVA过滤器实现禁止浏览器缓存的源代码

package com.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 一个简单的让浏览器不用缓存的 * @author 范芳铭 */public class EasyNoCacheFilter implements Filter{    private FilterConfig filterConfig;    @Override    public void init(FilterConfig filterConfig) throws ServletException {        System.out.println("----过滤器初始化----");        this.filterConfig = filterConfig;    }    //过滤器功能在这里实现    @Override    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        //禁止浏览器缓存所有动态页面        response.setDateHeader("Expires", -1);        response.setHeader("Cache-Control", "no-cache");        response.setHeader("Pragma", "no-cache");        chain.doFilter(request, response);    }    @Override    public void destroy() {        System.out.println("----过滤器销毁----");    }}

2、 参数说明
1 response.setDateHeader(“Expires”,-1);
2 response.setHeader(“Cache-Control”,”no-cache”);
3 response.setHeader(“Pragma”,”no-cache”);
 并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头。

Expires数据头:值为GMT时间值,为-1指浏览器不要缓存页面
Cache-Control响应头有两个常用值:
no-cache指浏览器不要缓存当前页面。
max-age:xxx指浏览器缓存页面xxx秒。
3、 修改web.xml

  <filter>      <filter-name>NoCacheFilter</filter-name>      <filter-class>com.filter.EasyNoCacheFilter</filter-class>  </filter>  <filter-mapping>      <filter-name>NoCacheFilter</filter-name>      <servlet-name>*.jsp</servlet-name>  </filter-mapping>
0 0
原创粉丝点击