一、生命周期
当tomcat容器启动的时候,会加载这个filter,并且调用init()方法,给encoding赋初值。当生命周期结束,就调用destroy()的方法。
init():初始化,在创建过滤器对象的时候会被调用。在过滤器在web应用启动时创建,就只创建一次,以后再调用也不会初始化
doFilter():执行过滤的主要方法,用于过滤请求和响应,请求一次就调用一次,可以调用多次
destory():销毁方法,过滤器对象销毁的时候会被调用,也只是调用一次。
二、过滤器的作用:
Filter和Servlet一样都是在服务器中运行的,因此也是需要在web.xml进行配置
过滤器实现了Filter接口,用于在请求资源或者响应资源,或者请求和响应资源的时候,执行过滤任务
首先定义一个过滤器类
public class TimerFilter implements Filter {
public TimerFilter() {
super();
System.out.println("实例化了过滤器");
}
@Override
public void destroy() {
System.out.println("过滤器被销毁");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
long start = System.currentTimeMillis();
System.out.println("计时完毕");
// 请求继续
arg2.doFilter(request, response);
// 请求完毕之后才运行到这里
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "毫秒");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("过滤器被创建");
}
}
然后在web.xml中进行配置
Timer
com.filtertest.servlet.TimerFilter
Timer
/FilterTestServlet
过滤器可以监听多个servlet的状态的,只要在
/FilterTestServlet
在这里配置servlet的路径就可以了
然后在servlet的处理前就会先走过滤器了。