Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
1、编写servlet类,实现Filter接口。
public class Filter01 implements Filter {
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)throws IOException,ServletException {
System.out.println("--------------Filter01------------");
filterChain.doFilter(servletRequest,servletResponse); //释放拦截器
}
2、filter执行过程
执行流程:Tomcat接收并解析请求,创建request与response对象,并创建FilterChain对象。
执行过滤器1,将request与response对象传入参数,执行结束之后开始调用 filterChain.doFilter(request,response);执行之后的过滤器。
过滤器全部执行结束之后,调用servlet的doGet(request,response);,执行servlet。
3、生命周期
创建:在Tomcat启动时,利用init(FilterConfig filterConfig)方法
执行:在过滤被访问资源的时候
销毁:利用destory()方法, 在对象销毁之前调用
4、匹配规则
1)完全匹配
2)目录匹配
3)后缀名匹配
5、使用注解
@WebFilter(urlPatterns ="/*")
6、过滤器执行顺序
方式一web.xml:根据servlet-mapping的顺序来执行
方式二注解形式:根据类名的先后顺序执行
如果有配置文件,以配置文件优先。(如果一个类在配置文件中进行了配置,又写了注解,那么会先执行配置文件中filter,同名filter会再次按照类名的先后顺序执行)
7、拦截方式
REQUEST:默认值。浏览器直接请求资源(当用户直接请求一个网页时才会通过此filter,当用户通过RequestDispatcher的forward不会通过该filter)
FORWARD:转发访问资源(通过RequestDispatcher的forward方法访问对应的url时,或者:<jsp:forward>)
INCLUDE:包含访问资源(通过RequestDispatcher的include方法访问对应的url时,或者<jsp:include>)
ERROR:错误跳转资源(当目标资源在web.xml配置<error-page>时,或者jsp页面中配置isErrorPage="true")
ASYNC:异步访问资源