Servlet 过滤器和 Servlet 上下文侦听器有啥区别?
Posted
技术标签:
【中文标题】Servlet 过滤器和 Servlet 上下文侦听器有啥区别?【英文标题】:What is the difference between a Servlet Filter and a Servlet Context Listener?Servlet 过滤器和 Servlet 上下文侦听器有什么区别? 【发布时间】:2012-04-06 10:43:14 【问题描述】:使用 Servlet 过滤器与使用 Servlet 上下文侦听器有什么区别?
您什么时候会使用其中一种?
【问题讨论】:
【参考方案1】: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 以及如何解释它们。它们包含此类琐碎问题的所有答案。
【讨论】:
您提供了比 Java 文档中更多有用的信息。所以谢谢。以上是关于Servlet 过滤器和 Servlet 上下文侦听器有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章