一、过滤器简介
1 概述
Filter可以在请求执行web资源之前或之后执行
2 使用
2.1 @WebFilter(/*)
只要访问的路径符合Filter的拦截规则,即使访问的web资源不存在,该请求也会经过Filter
2.2 xml配置
<filter>
<filter-name>demo01Filter</filter-name>
<filter-class>com.dfbz.filter.Demo01Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>demo01Filter</filter-name>
<!--所有的请求都经过该Filter-->
<url-pattern>/*</url-pattern>
</filter-mapping>
2.3 Filter的拦截规则
方式 | 示例 |
---|---|
精确匹配 | /user 、/user.jsp |
目录匹配 | /user/* 、/emp/* |
后缀匹配 | *action 、*.html 、*.jsp |
3 Filter的生命周期
创建:服务器启动时创建
创建次数:只会创建一次
销毁:服务器关闭
3.1 相关方法
Filter接口中的方法 | 作用和执行次数 |
---|---|
void init() | 初始化的方法,在服务器启动就加载,执行1次 |
void doFilter() | 拦截到请求之后执行的核心逻辑方法,执行N次 |
void destroy() | 销毁,在服务器关闭的时候,执行1次 |
4 FilterConfig
Filter的配置类,主要用于获取ServletContext对象
4.1相关方法
String getFilterName()
:获取该Filter的名称,默认为该Filter类的全路径名
ServletContext getServletContext()
:获取上下文对象(ServletContext)
String getInitParameter(String var1)
:获取Filter的初始化参数
Enumeration<String> getInitParameterNames()
:获取全部Filter的初始化参数
5 拦截方式
过滤类型 | 作用 |
---|---|
REQUEST | 只拦截来自浏览器发送过来的请求,默认值 |
FORWARD | 只拦截通过RequestDispatcher.forward()发送的请求 |
INCLUDE | 只拦截通过RequestDispatcher.include()发送的请求 |
ERROR | 只拦截由于异常/错误触发的请求 |
ASYNC | 拦截异步的Servlet,该Filter也要开启异步支持 |
二、过滤器链
1 执行顺序
使用注解方式:根据字母的先后顺序执行:A>B>C
使用xm配置:配置在前面的Filter先执行