过滤器(Filter)、监听器(Listener)学习

一、过滤器——Filter

概念:过滤器Filter是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求(request)和响应(response)对象进行检查和修改。


特点:
1.Servlet过滤器可以检查和修改ServletRequest和ServletResponse对象
2.Servlet过滤器可以被指定和特定的URL关联,只有当客户请求访问该URL时,才会触发过滤器
3.Servlet过滤器可以被串联在一起,形成管道效应,协同修改请求和响应对象


作用:
1.查询请求并作出相应的行动。
2.阻塞请求-响应对,使其不能进一步传递。
3.修改请求的头部和数据。用户可以提供自定义的请求。
4.修改响应的头部和数据。用户可以通过提供定制的响应版本实现。
5.与外部资源进行交互。


适用的场景
A.认证过滤
B.登录和审核过滤
C.图像转换过滤
D.数据压缩过滤
E.加密过滤
F.令牌过滤
G.资源访问触发事件过滤
H.XSL/T过滤
I.Mime-type过滤
J .过滤字符编码


java.servlet.Filter接口:所有的过滤器类必须实现该接口。
这个接口含有3个过滤器类必须实现的方法:
A.init(FilterConfig):
这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数
B.doFilter(ServletRequest,ServletResponse,FilterChain):
这个方法完成实际的过滤操作,当客户请求访问于过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器
C.destroy():Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源

二、监听器——Listener

监听器的主要作用是做一些初始化的操作,在web应用启动时加载,在web应用关闭时销毁。最常见的监听器接口是ServletContextListener,自定义的监听器要实现该接口。该接口的两个方法:
contextInitialized(ServletContextEvent)
contextDestroyed(ServletContextEvent)

加载顺序

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰。
首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -> filter -> servlet
同时还存在着这样一种配置节:context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文中的信息,那么 context-param 配置节是不是应该写在 listener 配置节前呢?实际上 context-param 配置节可写在任意位置,因此真正的加载顺序为:context-param -> listener -> filter -> servlet。

参考链接:
JavaWeb学习篇之—-Servlet过滤器Filter和监听器
过滤器、监听器、拦截器的区别

Java中Filter、Listener,拦截器的学习,listener、 filter、servlet 加载顺序及其详解

你可能感兴趣的:(java学习,jsp)