【问题标题】:What is the difference between a Servlet Filter and a Servlet Context Listener?Servlet 过滤器和 Servlet 上下文侦听器有什么区别?
【发布时间】:2012-04-06 10:43:14
【问题描述】:

使用 Servlet 过滤器与使用 Servlet 上下文侦听器有什么区别?

您什么时候会使用其中一种?

【问题讨论】:

    标签: jsf servlets servlet-filters servlet-listeners


    【解决方案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 文档中更多有用的信息。所以谢谢。
    猜你喜欢
    • 2019-02-11
    • 2015-04-18
    • 2011-06-10
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2014-12-30
    • 2015-03-18
    相关资源
    最近更新 更多