【问题标题】:difference between a valve and a filter阀门和过滤器的区别
【发布时间】:2011-07-29 02:11:30
【问题描述】:

有人能解释一下 servlet 过滤器和 tomcat 阀门之间的区别吗?使用一个比另一个有什么优势?

【问题讨论】:

标签: tomcat servlets


【解决方案1】:

不完全正确。使用过滤器,您可以使用 url-pattern 影响某些应用程序、引擎或主机。阀门只影响应用程序、引擎或主机的所有部分。阀门没有 url 模式。就这样。对不起我的英语不好。我希望这能解决您的问题。

【讨论】:

    【解决方案2】:

    来自 Tomcat 文档:

    Valve 元素表示将插入到关联 Catalina 容器的请求处理管道中的组件

    servlet 过滤器的用途完全相同,但阀门是 Tomcat 的特定类,与 Tomcat 基础架构/API 紧密耦合。另一方面,servlet API 由所有兼容的 Web 容器实现。也就是说,阀门不适用于例如Jetty,它有不同的 API,而 servlet 过滤器会有。

    另一个重要的区别是阀门在容器级别工作(拦截所有应用程序/请求),而 servlet 过滤器仅拦截对给定应用程序的所有请求。所以如果你想实现服务器范围的拦截器,阀门是必要的。

    【讨论】:

    • 在应用服务器(例如 jboss)中部署 Web 应用程序时,我应该使用过滤器来处理特定于 Web 应用程序的事情,而不是阀门?
    • 我什至会说:您应该始终使用 servlet 过滤器,除非您真的需要阀门(例如查看 Logback Access 以查看何时需要阀门)。
    • 我认为您说过滤器仅拦截对给定应用程序的所有请求是不正确的。 tomcat 文档说:“Tomcat 提供了许多过滤器,可以使用 $CATALINA_BASE/conf/web.xml 将它们配置为与所有 Web 应用程序一起使用,或者可以通过在应用程序的 WEB-INF/web 中配置它们来为单个 Web 应用程序配置它们.xml。每个过滤器如下所述。”过滤器可以配置为用于所有应用程序。
    【解决方案3】:

    阀门是特定于 tomcat 的。过滤器是标准的,它们的行为由规范定义。在大多数情况下,您需要一个过滤器。

    阀门仅用于需要访问本地 tomcat API 的功能。这是相当罕见的。

    【讨论】:

    • 如果我想添加日志语句来了解处理每个HTTP请求需要多长时间,我应该使用什么?
    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 2019-02-11
    • 1970-01-01
    • 2015-04-18
    • 2010-12-22
    • 1970-01-01
    • 2014-01-15
    • 2019-08-29
    相关资源
    最近更新 更多