通过实例讲解
Java_ Filter我们常见的应用方法
一、Filter常见的应用(2)------不缓存页面
1、禁止浏览器缓存所有动态页面的过滤器:
(1)有3个HTTP响应头字段都可以禁止浏览器缓存当前页面,它们在Servlet中的实例代码如下:response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
(2)、并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头。
(3)Expires数据头:值为GMT时间值,为-1指浏览器不要缓存页面。
2、Cache-Control响应头有两个
常用值:
(1)no-cache指浏览器不要缓存当前页面
(2)max-age:xxx指浏览器缓存页面xxx秒。
实例:
[java]
package com.hbsi.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;
public class NoCatchFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse) response;
resp.setDateHeader("expires",-1);
resp.setHeader("Cache-Control","no-cache");
resp.setHeader("Pragma","no-cache");
chain.doFilter(req, resp);
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
二、Filter常见的应用(3)------控制浏览器缓存页面中的静态资源的过滤器
1、场景:有些动态页面中引用了一些图片或css文件以修饰页面效果,这些图片和css文件经常是不变化的,所以为减轻服务器的压力,可以使用filter控制浏览器缓存这些文件,以提升服务器的性能。
实例:
[java]
package com.hbsi.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.se
rvlet.http.HttpServletResponse;
public class ExpiresFilter implements Filter {
private FilterConfig config;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse) response;
String uri=req.getRequestURI();
if(uri.endsWith(".css")){
long time=Integer.parseInt(config.getInitParameter("css"))*1000;
resp.setDateHeader("expries", System.currentTimeMillis()+time);
}else if(uri.endsWith(".jpg")){
long time=Integer.parseInt(config.getInitParameter("jpg"))*1000;
resp.setDateHeader("expries",System.currentTimeMillis()+time);
}else if(uri.endsWith(".js")){
long time=Integer.parseInt(