j2EE过滤器-filter
Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截。
Filter用处:
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
在HttpServletResponse到达客户端之前,拦截HttpServletResponse
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据
创建Filter需要实现Javax.servlet.Filter接口,该接口定义了如下三个方法:
(1)void init(FilterConfig config):初始化
(2)void destroy():可以做资源回收工作
(3)void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能,可以调用chain.doFilter()方法,执行该方法之前,是对用户请求进行预处理,执行该方法之后,是对服务器响应进行后处理。
配置Filter的两种方式:
(1)注解
属性
|
类型 |
说明
|
filterName
|
String
|
指定过滤器的name属性,等价于<filter-name>
|
value
|
String[]
|
该属性等价于urlPatterns属性,但是两者不应该同时使用 |
urlPatterns
|
String[]
|
指定一组过滤器的URL匹配模式。等价于<url-pattern>标签
|
servletNames
|
String[]
|
可指定多个Servlet名,使Filter仅对这几个Servlet执行,取值是@WebServlet中的name属性的取值,或者是web.xml中<servlet-name>的取值
|
dispatcherTypes
|
DispatcherType
|
指定该Filter仅对那种模式的请求进行过滤。具体取值包括:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。默认全部过滤。 |
initParams
|
WebInitParam[]
|
指定一组过滤器初始化参数,等价于<init-param>标签
|
asyncSupported
|
boolean
|
声明过滤器是否支持异步操作模式。等价于<async-supported>标签 |
description
|
String
|
该过滤器的描述信息。等价于<description>标签
|
displayName
|
String
|
该过滤器的显示名,通常配合工具使用,等价于<display-name>标签
|
(2)web.xml配置
<filter>
<filter-name>filterName</filter-name>
<filter-class>filterClass</filter-class>
</filter>
<filter-mapping>
<filter-name>filterName</filter-name>
<url-pattern>/*</url-pattern>指定Filter负责拦截的URL,指定url-pattern为/*表示拦截所有用户请求。
</filter-mapping>