1. 基本定义
- 过滤器的作用
- 一般用于完成通用操作。如登陆验证、同意编码处理、敏感字符过滤
- 快速入门
- 定义一个类,实现接口Filter,包为javax.servlet
- 复写方法doFilter
- 配置拦截路径:配置web.xml或注解配置
1 | //注解配置,访问所有资源之前,都会执行该过滤器 |
2. 过滤器细节
2.1 web.xml配置
- 在web.xml中的web-app标签体内加入下面代码
1 | <filter> |
- WebFilter注解源码:@webFilter用于将注解过滤器,该注解在部署时被容器处理,容器根据具体的属性将相应的类部署为过滤器。该注解有以下属性,均有默认值。但是value、urlPatterns、servletNames三者至少包含一个,且value和urlPatterns一般不要同时赋值,如果同时指定,通常忽略value的取值
1 |
|
2.2过滤器执行流程
客户端请求A资源,先执行过滤器放行之前的代码,过滤器放行后执行A资源,然后执行放行代码下的程序
执行过滤器
执行放行后的资源
执行过滤器放行代码下的代码
2.3过滤器生命周期方法
init方法:服务器启动后,会创建Filter对象,然后调用init方法。用于加载资源
dofilter方法:每一次请求被拦截资源时,会执行该方法
destroy方法:服务器正常关闭,Filter对象被销毁,会执行destroy方法。用于释放资源
2.4过滤器配置详解
拦截路径的配置
配置1:具体的资源路径:/index.jsp 或 /findServlet 只有访问该资源时,过滤器才会被执行
配置2:目录拦截:/user/* 访问/user下的所有资源时,过滤器都会被执行
1
2
3
4
5
//在web目录下还可以建立user子目录,里面也可以存放资源
//访问servlet和访问user目录下的资源都会执行该过滤器配置3:后缀名拦截:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
配置4:/* 拦截所有资源
拦截方式的配置:资源被访问的方式
配置1:注解配置dispatcherTypes,数组,可配置多个选项
(1) REQUEST:默认值,浏览器直接请求资源
(2) FORWARD:转发访问资源
(3) INCLUDE:包含访问资源
(4) ERROR:错误跳转资源
(5) ASYNC:异步访问资源
1
2java
//转发到index.jsp 和 直接访问index.jsp 都会执行该过滤器
2.5过滤器链(配置多个过滤器)
执行顺序:有两个过滤器:过滤器1、过滤器2
- 过滤器1
- 过滤器2
- 资源
- 过滤器2
- 过滤器1
过滤器先后顺序
注解配置:按照类名的字符串比较规则比较,值小的先执行
如:AFilter 和 BFilter
web.xml配置:filter-mapping谁定义在上面,谁先执行