·为什么需要过滤器
我们想要把多个Servlet里面冗余的代码提取出来,现在是比较难以实现的
使用过滤器在servlet运行之前插入代码
·面向切面编程
AOP
就是在不修改原有代码的前提下
使用切面想向代码中增加、维护功能的编程理念
过滤器就是可以在请求发送之后,还未到请求目的地之前插入运运行代码的机制
下面通过一个对servlet运行计时的案例来了解过滤器的使用
首先创建过滤器
实现一个接口代码如下
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("过滤器被创建");
}
}
在we.xml中的配置文件
<filter>
<filter-name>Timer</filter-name>
<filter-class>com.filtertest.servlet.TimerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Timer</filter-name>
<url-pattern>/FilterTestServlet</url-pattern>
</filter-mapping>
过滤器可以监听多个servlet的状态的,只要在
<url-pattern>/FilterTestServlet</url-pattern>
在这里配置servlet的路径就可以了
我这里写的写的一个web请求servlet到返回结果用了多长时间
过滤器在tamcat服务器启动时就创建成功了,比servlet的优先级高一些。。