过滤器的作用是什么?
1.拦截传入的请求和传出的响应,能拿到请求和响应中的数据
2.监视,修改,或处理正在客户端和服务器之间交换的数据流
3.利用过滤器的执行时机,实现Web程序的预处理,和后期的处
理逻辑!
A)日志记录,实时记录请求
B)改善性能,手机访问可以先预处理图片等
C)安全与会话管理,用session里的值判断用户是否登录等
D)敏感字过滤,违法信息过滤
4.设置编码,处理中文乱码
Filter和Listener同常放在web包中
![](https://i-blog.csdnimg.cn/blog_migrate/3211d26cf46998b382d0817f82c06470.png)
![](https://i-blog.csdnimg.cn/blog_migrate/edb81926b9c913737bb5c7d0acbf1e06.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c561f204290246185bfe5285d23197a8.png)
和servlet一样,都需要config配置,都需要初始化,都需要重写处理方法,都有销毁
FilterConfig接口
![](https://i-blog.csdnimg.cn/blog_migrate/3cb64ff203fec0f2b732c969224ea7cd.png)
过滤器的使用
编写过滤器的步骤?
1:创建过滤器,实现Filter接口(javax.servlet.包下),
实现doFilter()方法/init()方法
a):正确的话:调用写一个Web资源
b):错误的话:导航到其它的URL
2:部署过滤器
a)编写Filter到/WEB-INF/class目录
<filter></filter>
<filter-mapping>
<url-patten>指定需要过滤的url</url-patten>
</filter-mapping>
3:启动服务器,观察Web资源,和过滤效果
1:创建过滤器
![](https://i-blog.csdnimg.cn/blog_migrate/6abfe1e23e64a33aecd9d546a1b3535c.png)
2:部署过滤器
![](https://i-blog.csdnimg.cn/blog_migrate/e6e444a04bba58a22321cd95d682f624.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ee9cf241f7610578fd513b826d24afa1.png)
容器会从class的路径去实例化filter。
设置乱码处理
![](https://i-blog.csdnimg.cn/blog_migrate/89f6fa13f80be5359fafbb1a66ce34b8.png)
过滤器的生命周期:
执行的顺序
![](https://i-blog.csdnimg.cn/blog_migrate/c89f23ae8ffc1c862b2f7e8d02416779.png)
生命周期
![](https://i-blog.csdnimg.cn/blog_migrate/87b4c9b5f902533f2c5f74dc0c0e9e0e.png)
servlet和Filter在生命周期上的区别?
Servlet:当访问servlet的时候,容器会检查,如果还没
有servlet的实例,容器则会创建一个servlet实例。
一次应用过程只执行一次实例化和初始化
Filter:在容器启动的时候,就进行实例化,初始化的操作,
一次应用过程只执行一次实例化和初始化
![](https://i-blog.csdnimg.cn/blog_migrate/9a2fdfba070cfe8339b1b512fa54a2c6.png)
什么是过滤器链?
![](https://i-blog.csdnimg.cn/blog_migrate/3f7e26b162670b17324845aef14dc0ca.png)
一般把节省资源的Filter放在前面
![](https://i-blog.csdnimg.cn/blog_migrate/b5e8ca91755a53cf66c0620621e5c2b4.png)