一.什么是过滤器?
Servlet过滤器从字面上的字意理解为经过一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。
二.过滤器的工作原理
当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户发回一个响应。当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。如图1所示:在Servlet2.4规范中,对2.3规范进行了扩展,使得Servlet过滤器可以应用在客户机和Servlet之间。Servlet和Servlet或JSP页面之间,以及各个JSP页面之间。
三.过滤器的特点
(1)Servlet过滤器可以检查和修改ServletRequest和ServletResponse对象
(2)Servlet过滤器可以被指定和特定的URL关联,只有当客户请求访问该URL时,才会触发过滤器
(3)Servlet过滤器可以被串联在一起,形成管道效应,协同修改请求和响应对象
四.过滤器的使用
(1)查询请求并作出相应的行动。
(2)阻塞请求-响应对,使其不能进一步传递。
(3)修改请求的头部和数据。用户可以提供自定义的请求。
(4)修改响应的头部和数据。用户可以通过提供定制的响应版本实现。
(5)与外部资源进行交互。
五.过滤器的应用场景
1.认证过滤;
2.登录和审核过滤;
3.图像转换过滤;
4.数据压缩过滤;
5.加密过滤;
6.令牌过滤;
7.资源访问触发事件过滤;
8.XSL/T过滤;
9.Mime-type过滤。
六.过滤器与拦截器的区别
1.拦截器是基于java的反射机制的,而过滤器是基于函数回调;
2.拦截器不依赖与servlet容器,过滤器依赖与servlet容器;
3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用(比如静态资源文件之类的);
4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问;
5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次;
6.拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
Servlet过滤器是服务器与客户端请求之间的中间层组件,用于处理和过滤请求。它能修改请求和响应对象,按URL关联,并可串联形成过滤器链。常见应用场景包括认证、登录审核、数据压缩等。与拦截器相比,过滤器依赖于Servlet容器,适用于更广泛的请求类型,且只在容器初始化时调用一次。
831

被折叠的 条评论
为什么被折叠?



