概念
*生活中的过滤器:净水器,空气净化器...
web中的过滤器:当访问服务器资源时,过滤器可以将请求拦下来,
完成一些特殊的功能
过滤器的作用:
一般用于完成通过的操作。如:登录验证,统一编码处理,敏感字符过滤...
快速入门:
1. 步骤:
1. 定义一个类,实现接口Filter
2. 复写方法
3. 配置拦截路径
2. 代码
1 | "/*") //访问所有的资源之前,都会执行该过滤器 ( |
3. 过滤器细节:
1. web.xml配置
和配置servlet基本一样的
1 | <filter> |
2. 执行流程
1. 执行过滤器
2. 执行放行后的资源
3. 回来执行放行代码下边的代码
1 |
|
3. 过滤器生命周期方法
1. init:在服务器启动后,会创建Filter对象,
然后调用init方法.只执行一次
2. doFilter:
每一次请求被拦截时,会被执行,执行多次。
3. destroy:
在服务器关闭后,filter对象被销毁,
如果是正常关闭,然后调用destroy方法,执行一次。
1 | package com.web.filter; |
4. 过滤器配置详解
拦截路径配置
1. 具体路径资源:
/index.jsp 只有当访问index.jsp时,过滤器才会被执行。
2. 拦截目录:
/user/* 访问/user下的所有资源时,过滤器会被执行
3. 后缀名拦截
*.jsp 访问所有的jsp资源时,过滤器会被执行
4. 拦截所有的资源
/* 访问所有资源时,过滤器都会被执行。
拦截方式的配置
资源被访问的方式:
- 注解配置
设置dispatcher属性
- REQUEST:默认值,浏览器直接请求资源
1
2/*浏览器直接请求index.jsp时,该过滤器会被执行*/
"/index.jsp",dispatcherTypes = DispatcherType.REQUEST) (urlPatterns =FOEWORD:转发访问资源
1
2/*只有浏览器转发访问index.jsp时,该过滤器会被执行*/
"/index.jsp",dispatcherTypes = DispatcherType.REQUEST) (urlPatterns =- INCLUSE:包含访问资源 - ERROR:错误跳转资源 - ASYNC:一部访问资源
同时设置多个执行条件:
1 | /*浏览器直接访问或者转发访问index.jsp时,该过滤器会被执行*/ |
- web.xml
设置<dispatcherTypes></dispatcherTypes>
5. 过滤器链(配置多个过滤器)
配置多个过滤器,可以同时生效
执行顺序和先后
如果有两个过滤器,过滤器1和过滤器2
执行顺序:
1. 过滤器1 2. 过滤器2 3. 资源执行 4. 过滤器2 5. 过滤器1
过滤器先后顺序问题
注解配置
按照类名字符串的字符串进行逐个比较,值小的先被执行。 例:AFilter和BFliter两个过滤器,AFilter先执行。
web.xml
谁的<filter-mapping></filter-mapping>定义在上面,谁先执行