一、概念
当我们访问服务器的资源时,web中的过滤器可以将请求拦截下来,完成一些特殊的功能
二、过滤器的功能
一般我们使用过滤器来完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤…等等的操作
三、使用步骤
- 定义一个类,实现接口Fileter
- 复写方法
- 配置拦截路径
两种配置方式
① 注解配置
② web.xml配置 - 一定要有放行的操作
举例示范
注意:
① 如果不写放行代码的话,那么doFilter中的代码能够被执行,但是当我们访问index.jsp的时候显示不出来页面上的内容
② 注解中的/*代表的是任意路径
四、细节问题
1、web.xml的配置方式
这里需要注意urlpattern是拦截路径<url-pattern>拦截路径</url-pattern>
2、过滤器的执行流程
FilterDemo2的代码如下
index.jsp的代码如下
执行的结果如下
过滤器的执行流程是
当我们访问index.jsp的地址的时候,,如果过滤器中要拦截的地址包含我当前访问的这个页面的话,那么它会先执行过滤器放行操作的上面的代码,然后访问到了index.jsp的页面,然后index.jsp页面上就显示出来index.jsp…并且控制台输出了jsp的代码index.jsp…,然后执行放行后的代码,然后才把消息响应给浏览器。
3、过滤器的声明周期方法
- init方法:在服务器启动后,会创建Filter对象,然后调用init方法。它只会执行一次,我们一般用于加载资源
- doFilter方法:每一次请求被拦截时,他都会执行,它能够执行很多次
- destroy方法:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭的话,则会执行destroy方法。它只会执行一次,用于释放资源
4、过滤器的配置详解
(1)拦截路径的配置:
- ① 具体路径:/index.jsp 只有在访问index.jsp资源时,过滤器才会被执行
- ② 拦截目录:/user/* 代表访问/user下的所有资源时,过滤器都会被执行
- ③ 后缀名拦截:*.jsp 表示访问所有后缀名为jsp的资源时,过滤器都会被执行
- ④ 拦截所有:/* 表示访问所有资源时,过滤器都会被执行
(2)拦截方式的配置:资源被访问的方式
注解配置:
设置dispatcherTypes属性
① REQUEST:默认值。表示浏览器直接请求资源
② FORWARD:转发访问资源。表示只有转发访问的资源才能被过滤器所拦截
③ INCLUDE:包含访问资源
④ ERROR:错误跳转
⑤ ASYNC:异步访问资源
web.xml配置:
设置<dispatcher></dispatcher>
这个标签里的属性,也同样时上面的五个值,注意要配置在<filter-mapping> </filter-mapping>
这个标签里
5、过滤器链(配置多个过滤器)
(1)过滤器的执行顺序:
如果有两个过滤器,过滤器1和过滤器2。那么执行顺序是过滤器1然后过滤器2然后资源执行,然后回来执行过滤器2再执行过滤器1。
(2)过滤器的先后顺序问题:
注解配置
按照类名的字符串比较规则取比较,值小的先执行,如AFilter和BFilter(每一个字符分别比较,先比较A和B,发现A 比B 小所以A就先执行了)
web.xml配置
谁定义再上面,谁就先执行。我们再web.xml中会配置很多filtermapping,谁再上面谁就先执行
案例1——登录验证
寒假再做