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