JavaWeb三大组件之一 —— Filter
程序员文章站
2022-03-10 14:24:26
...
目录
1. 简介
2. 快速入门
3. 执行流程
4. 生命周期
5. 两种配置方式
6. 配置详解
7. 过滤器链(配置多个过滤器)
1. 简介
在 javax.servlet 包中。当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:一般用于完成通用的操作。如:登录验证,统一编码处理、敏感字符过滤等
2. 快速入门
- 定义一个类,实现接口Filter
- 实现Filter接口方法
- 配置拦截路径(访问什么资源,过滤器生效)
- 两种配置方式
- web.xml配置
- 注解配置(常用)
- 两种配置方式
3. 执行流程
- 执行过滤器
- 执行放行后的资源,如jsp、servlet等
- 回来执行过滤器放行代码下边定义的代码
4. 生命周期
- init:服务器启动后,会创建Filter对象,调用init。只执行一次。作用:用于加载资源。
- doFilter:每一次请求被拦截的资源时,执行。
- destroy:服务器关闭后,Filter对象被销毁,只执行一次。如果服务器正常关闭,则执行destory。反之不执行。作用:一般用于释放资源。
5. 两种配置方式
方式一:web.xml配置方式
<filter>
<filter-name>demo2</filter-name>
<!--Filter全类名-->
<filter-class>cn.web.Filter.FilterDemo2</filter-class>
</filter>
<filter-mapping>
<filter-name>demo2</filter-name>
<!--url-pattern,表示拦截路径。访问所有的资源都会执行demo2的Filter-->
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
方式二:注解配置,只能作用在类上,保留到运行时
@WebFilter(value = "/index.jsp", dispatcherTypes = DispatcherType.REQUEST)
6. 配置详解
拦截路径的配置
- 具体的资源路径:如:
"/index.jsp"
只有访问index.jsp资源时,过滤器才会被执行。 - 拦截目录:如:
"/user/*
访问/user下的所有资源时,过滤器都会被执行。 - 拦截后缀名:如:
"*.jsp"
访问所有后缀名为jsp资源时,过滤器都会被执行 - 拦截所有资源:如:
"/*"
访问任意资源,过滤器都会被执行
拦截方式的配置:资源被访问的方式
- 注解配置:设置 dispatcherTypes 属性,值是一种枚举,有五种取值
-
FORWARD
:转发访问资源
比如:@WebFilter(value = “/index.jsp”, dispatcherTypes = DispatcherType.FORWARD) 只有转发访问index.jsp时,该过滤器才会被执行 -
INCLUDE
:包含访问资源 -
REQUEST
:默认值。客户端(浏览器)直接请求资源
比如:@WebFilter(value = “/index.jsp”, dispatcherTypes = DispatcherType.REQUEST) 客户端直接请求index.jsp时,过滤器才会被执行 -
ASYNC
:异步访问资源 -
ERROR
:错误跳转资源(例如index页面配置的错误页面)
-
注意:
如**解,浏览器直接发送请求或者转发访问index.jsp,过滤器都会被执行:
@WebFilter(value = "/index.jsp", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})
如**解,并且定一个Servlet转发到index.jsp。那么:在浏览器中访问这个servlet,过滤器会执行2次!!
@WebFilter(value = "/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})
- web.xml配置:设置标签即可, 也有5个属性,同注解配置的5个参数。
7. 过滤器链(配置多个过滤器)
执行顺序:
如果有2个过滤器,过滤器1和过滤器1,执行顺序如下:
- 过滤器1
- 过滤器2
- 资源执行
- 过滤器2
- 过滤器1
过滤器执行先后的规则:
- 注解配置:按照类名的字符串比较规则比较,值小的过滤器先执行!
如:AFilter 和 BFilter。那么:AFilter先执行,BFilter后执行。 - web.xml配置:标签定义在前面的,先执行。
上一篇: (软件构造博客)==和equals的区别
下一篇: 过滤器Filter 的基本使用