禁止浏览器缓存所有动态页面的过滤器:
有 3 个 HTTP 响应头字段都可以禁止浏览器缓存当前页面,它们在 Servlet 中的示例代码如下:
- response.setDateHeader("Expires",-1);
- response.setHeader("Cache-Control","no-cache");
- response.setHeader("Pragma","no-cache");
并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头。
Expires数据头:值为GMT时间值,为-1指浏览器不要缓存页面
Cache-Control响应头有两个常用值:
- no-cache指浏览器不要缓存当前页面。
- max-age:xxx指浏览器缓存页面xxx秒,例如"Cache-Control", "max-age=3600"
什么数据要禁止浏览器缓存?
如果一些数据,实时性要求比较高, 那么 这样的数据就要通知浏览器不要缓存。例如彩票网站、股票网站等等。
代码如下:
package blog.csdn.net.web.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;
/**
* 禁止缓存filter
* @author mChenys
*
*/
public class NoCacheFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 强转request和response对象
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
// 这三个头 设置 浏览器 不要 缓存
httpServletResponse.setHeader("cache-control", "no-cache");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0); // 设置 为 0 就表示 1970 0 点0 分0 秒
// 放行
chain.doFilter(httpServletRequest, httpServletResponse);
}
public void destroy() {
}
}
注册filter:
<filter>
<filter-name>NoCacheFilter</filter-name>
<filter-class>blog.csdn.net.web.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>NoCacheFilter</filter-name>
<!-- 这里使用的 是 扩展名 匹配, 表示 访问 jsp 页面的 时候 ,这个 filter 执行 过滤 -->
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
测试: