Filter和Listener是Servlet规范中的两个高级特性,不同于Servlet,它们不用于处理客户端请求。
Filter用于对请求对象 request、response对象进行修改。
Listener用于对context、session、request事件进行监听。
善于使用Servlet规范中的这两个高级特性能够轻松地解决一些特殊问题。
一、Filter
Filter 被称作过滤器,其基本功能就是对Servlet容器 调用Servlet的 过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。就好比现实中的污水净化设备,它可以看作一个过滤器,专门用于过滤污水杂质。
总结:
① Filter其基本功能就是对 Servlet容器 调用 Servlet 的过程进行拦截。
② Servlet 响应处理 前后 实现一些特殊功能。
③ 浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作。然后再将请求转发给目标资源。
④ 服务器处理响应的过程中,也需要将响应结果发送给过滤器,在过滤器中对响应结果进行处理后,才会发送给客户端。
⑤ Filter 不同于Servlet,它不用于 处理客户端的请求,而是参与客户端请求/响应服务器资源的过程中,主要针对的request 、response对象的修改。
注意:如果在Filter的doFilter方法中拦截到请求,但是,没有调用FilterChain调用链 将请求继续传递到下一个Filter或者Servlet处理器时,后面代码将不会继续执行后续流程。
二、Filter映射
2.1、使用通配符映射“*”拦截用户所有请求
2.2、拦截不同方式的请求
三、Filter 链
在一个Web应用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一个URL进行拦截,也可以通过通配符对某一类请求拦截。如果多个Filter程序都对同一个URL资源进行拦截,那么这些Filter就会组成一个Filter链(也叫过滤器链)。Filter链用FilterChain对象来表示,FilterChain对象中有个doFilter()方法该方法的作用就是让Filter链上的当前过滤器放行,使请求进入下一个Filter。
注意:Filter链中各个拦截器的顺序与它们在web.xml文中