使用Servlet过滤器与Servlet上下文侦听器有什么区别?
你什么时候使用其中一个?
答案 0 :(得分:10)
A Filter
拦截与其URL模式匹配的HTTP请求,并允许您修改它们。另请参见其javadoc:
过滤器是对资源请求(servlet或静态内容)或资源响应(或两者)执行过滤任务的对象。
过滤器在
doFilter
方法中执行过滤。每个Filter
都可以访问FilterConfig
对象,从中可以获取其初始化参数,以及对ServletContext
的引用,例如,它可以加载过滤任务所需的资源过滤器在Web应用程序的部署描述符中配置。
已为此设计确定的示例包括:
- 身份验证过滤器
- 记录和审核过滤器
- 图片转换过滤器
- 数据压缩过滤器
- 加密过滤器
- 令牌过滤器
- 触发资源访问事件的过滤器
- XSL / T过滤器
- Mime型链滤器
A ServletContextListener
拦截webapp的启动和关闭,允许您在启动和/或关闭时执行一些代码。另请参见其javadoc:
用于接收有关
ServletContext
生命周期更改的通知事件的接口。为了接收这些通知事件,实现类必须在Web应用程序的部署描述符中声明,使用
WebListener
注释,或者通过addListener
上定义的ServletContext
方法之一注册。 {1}}。此接口的实现在其
contextInitialized(javax.servlet.ServletContextEvent)
方法中按其声明的顺序调用,并在其contextDestroyed(javax.servlet.ServletContextEvent)
方法中以相反的顺序调用。
何时使用这一个或另一个现在应该是显而易见的。如果要拦截处理特定URL模式的HTTP请求,请使用Filter
,因为您要检查/修改HTTP请求/响应。如果要拦截webapp的启动和/或关闭,请使用ServletContextListener
。
请知道在何处找到javadoc以及如何解释它们。它们包含了对这类琐碎问题的所有答案。