使用Servlet Filter和使用Servlet Context Listener之间有哪些区别?
什么情况下会使用其中一个而不是另一个?
使用Servlet Filter和使用Servlet Context Listener之间有哪些区别?
什么情况下会使用其中一个而不是另一个?
过滤器
拦截与其URL模式匹配的HTTP请求并允许您修改它们。请参阅其javadoc:
一个过滤器是在资源(servlet或静态内容)的请求或响应上执行过滤任务的对象。
过滤器在
doFilter
方法中执行过滤。每个过滤器
都可以访问FilterConfig
对象,从中可以获取其初始化参数,并且可以使用指向ServletContext
的引用。例如,为了加载过滤任务所需的资源。过滤器在Web应用程序的部署描述符中配置。
已确认此设计的示例包括:
- 认证过滤器
- 日志和审计过滤器
- 图像转换过滤器
- 数据压缩过滤器
- 加密过滤器
- 令牌化过滤器
- 触发资源访问事件的过滤器
- XSL / T过滤器
- Mime类型链过滤器
ServletContextListener
拦截Web应用程序的启动和关闭,并允许您在启动和/或关闭时执行一些代码。请参阅其javadoc:
何时使用其中一个应该很明显。如果要拦截特定URL模式的HTTP请求,则使用接口,用于接收有关
ServletContext
生命周期更改的通知事件。为了接收这些通知事件,实现类必须在Web应用程序的部署描述符中声明,带有
WebListener
注释,或通过ServletContext
上定义的addListener
方法之一进行注册。此接口的实现按其已声明的顺序在其
contextInitialized(javax.servlet.ServletContextEvent)
方法中调用,在其contextDestroyed(javax.servlet.ServletContextEvent)
方法中按相反的顺序调用。
Filter
,因为要检查/修改HTTP请求/响应。如果要拦截Web应用程序的启动和/或关闭,则使用ServletContextListener
。