(1)概述
- 作用:当访问服务器的资源时,过滤器将请求拦截下来,完成一些特殊的操作。
- 比如:登录验证、统一编码处理
(2)两种配置方式
注解
- 生命周期 ``` package com.code.web.filter;
import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;
@WebFilter(“/*”) public class Filter2 implements Filter {
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
// request请求消息增强
System.out.println("浏览器的请求来了");
// 放行
chain.doFilter(req, resp);
// response响应消息增强
System.out.println("资源返回给浏览器");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init");
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
<a name="TK3Ym"></a>
#### webxml
<?xml version=”1.0” encoding=”UTF-8”?>
<filter>
<filter-name>demo1</filter-name>
<filter-class>com.code.web.filter.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<a name="3WXCV"></a>
#### 生命周期
- init()
- doFilter()
- destroy():服务器正常关闭才会回调
<a name="704aaa57"></a>
#### 拦截路径
- "/index":具体的资源路径
- "/user/*":拦截目录
- "*.jsp":后缀名拦截
- "/*":拦截所有资源,jsp/html/servelt等等
<a name="cUpGp"></a>
#### 拦截方式
- 注解属性
- dispatcherTypes
- REQUEST:只有浏览器直接请求资源,才会经过过滤器
- FORWARD:只有转发请求资源,才会经过过滤器
- INCLUDE:包含访问资源
- ERROR:错误跳转
- ASYNC:异步访问
- dispatcherTypes支持数组
@WebFilter(value = “/index.jsp”,dispatcherTypes = DispatcherType.REQUEST) @WebFilter(value = “/index.jsp”,dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
- web配置
<?xml version=”1.0” encoding=”UTF-8”?>
<filter-mapping>
<filter-name>demo1</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
```
(3)过滤器链
- 执行顺序:如果有两个过滤器A B,先进后出
- 过滤器A
- 过滤器B
- 资源执行
- 过滤器B
- 过滤器A
- 过滤器顺序
- 注解配置:按照类名的字符串规则比较,值小的先执行
- web.xml配置:按定义的上下顺序