(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("资源返回给浏览器");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init");}@Overridepublic 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配置:按定义的上下顺序
