过滤器(Filter)
一、概念
- Java Web的三大组件
- Servlet中组件一共有三种:Servlet、过滤器、监听器
- Servlet范畴的技术,提供的标准【得自己实现】
二、过滤器的使用场景:
- 对用户登录权限进行拦截
- 实现一些日志记录的功能
- 集中处理处理一些公共的功能,如:汉字编码和解码
三、特点
- 按照配置路径匹配,请求web的哪些资源会走过滤器
- 根据过滤器的执行流程:放行,才能往下走
四、过滤器编写步骤
- 自定义类,实现Filter 接口
- 实现接口中的方法,其中doFilter()就是执行过滤任务。(类似于Servlet中的service()方法)
- 和Servlet 一样需要进行web.xml配置,知道有过滤器(注解也可以)
- Filter由web服务器管理的: 独立Filter与Web资源,由url-pattern配置路径,决定了哪些请求会走过滤器
五、过滤器的生命周期
(一)、服务器管理创建,启动的时候生命周期就开始:
- 构造方法:服务器管理会创建过滤器对象
- init(FilterConfig config):初始化方法,在这之前会创建一个配置文件对象FilterConfig
(二)、在服务器启动之后,只创建了一个对象,每次调用都是使用的同一个过滤器对象
- 每次会调用doFilter()方法
(三)、正常关闭服务器的时候
- 使用Filter 对象调用destory()方法销毁过滤器Filter
六、 过滤器链FilterChain
- 过滤器的顺序是根据配置文件中配置的顺序
- 一次请求可以同时经过多个过滤器,每个过滤器会将请求传递给下一个过滤器。
- 如果下一个没有过滤器了,则传递给Web资源。
- 多个过滤器组成了一个过滤器链。
- 请求的时候经过每一个过滤器,响应的时候以相反顺序再回到每一个过滤器。
七、URL过滤方式
匹配方式 | 匹配哪些资源 | 示例 |
---|---|---|
完全匹配 | 必须与访问地址精确匹配 | /hello、/a/b |
目录匹配 | 匹配某一个目录下所有的Web资源 | /system/*、/ * |
扩展名匹配 | *.扩展名,匹配某一类扩展名 | *.jsp、 *.html |