什么是Filter
- 概念:
* 生活中的过滤器: 净水器, 空气净化器, 土匪
* web中的过滤器: 当访问服务器的资源时,过滤器可以请求拦截下来,完成一些特殊的功能
* 过滤器的作用:
* 一般完成通用的操作: 如: 登录验证,统一编码处理, 敏感字符过滤...
- 快速入门
1. 步骤:
1. 定义一个类,实现接口Filter
2. 复写方法
3. 配置拦截路径
* 两种选一种
1. web.xml
2. 注解: @WebFilter("/*") //访问所有资源之前,都会执行该过滤器
- 过滤器细节
1. web.xml配置(和配置Servlet差不多)
<filter>
<filter-name>别名,最好和这里过滤器类名相同</filter-name>
<filter-class>这个过滤器类的路径(url)</filter-class>
</filter>
<filter-mapping>
<filter-name>刚刚在上面定义的别名<filter-name>
<url-pattern>拦截的路径(例如: /*)</url-pattern>
</filter-mapping>
2. 过滤器执行流程
1. 执行过滤器
2. 执行放行后的资源
3. 回来执行过滤器放行下面的代码
3. 过滤器的生命周期(和继承SerlvetRequest的差不多)
1. init : 在服务器启动后会创建Filter对象,然后调用init方法,只执行一次,用于加载资源
2. destroy : 在服务器关闭后,Filter对象被销毁, 如果服务器是正常关闭,则会执行destroy方法,只执行一次,释放资源
3. doFilter : 每一次请求恶被拦截资源时,会执行, 执行多次
4. 过滤器配置详解
* 拦截路径配置:
1. 具体资源拦截路径: /index.jsp 只有访问index.jsp资源时过滤器才会被执行
2. 目录拦截: /user/* 访问/user下的所有资源时,过滤器都会执行
3. 后缀名拦截: *.jsp 访问所有后缀名未jsp资源时,过滤器都会被执行
4. 拦截所有资源: /* 访问所有资源时,过滤器都会被执行
* 拦截方式配置: 资源被访问的方式
* 注解配置
* 设置dispatcherTypes属性
1. REQUEST: 默认值. 浏览器直接请求资源
2. FORWARD: 转发访问资源
3. INCLUDE: 包含资源访问
4. ERROR: 错误跳转资源
5. ASYNC: 异步访问资源
* web.xml配置
* 设置<dispatcher></dispatcher>标签即可
5. 过滤器链(配置多个过滤器)
* 执行顺序: 如果有两个过滤器: 过滤器1和过滤器2
1. 过滤器1
2. 过滤器2
3. 资源执行
4. 过滤器2
5. 过滤器1
* 过滤器先后顺序问题:
1. 注解配置: 按照类名的字符串比较,值小的先执行
* 如: AFiler 和 BFilter, AFilter就先执行了
2. web.xml配置: 谁定义在上面,谁就先执行