【发布时间】:2011-07-29 02:11:30
【问题描述】:
有人能解释一下 servlet 过滤器和 tomcat 阀门之间的区别吗?使用一个比另一个有什么优势?
【问题讨论】:
-
有时您需要 Valve 来执行 Tomcat 特定的工作,例如 Netscaler 背后的 SSL 加速。见blog.inuus.com/vox/2009/04/tomcat-and-ssl-accelerators.html。
有人能解释一下 servlet 过滤器和 tomcat 阀门之间的区别吗?使用一个比另一个有什么优势?
【问题讨论】:
不完全正确。使用过滤器,您可以使用 url-pattern 影响某些应用程序、引擎或主机。阀门只影响应用程序、引擎或主机的所有部分。阀门没有 url 模式。就这样。对不起我的英语不好。我希望这能解决您的问题。
【讨论】:
来自 Tomcat 文档:
Valve 元素表示将插入到关联 Catalina 容器的请求处理管道中的组件
servlet 过滤器的用途完全相同,但阀门是 Tomcat 的特定类,与 Tomcat 基础架构/API 紧密耦合。另一方面,servlet API 由所有兼容的 Web 容器实现。也就是说,阀门不适用于例如Jetty,它有不同的 API,而 servlet 过滤器会有。
另一个重要的区别是阀门在容器级别工作(拦截所有应用程序/请求),而 servlet 过滤器仅拦截对给定应用程序的所有请求。所以如果你想实现服务器范围的拦截器,阀门是必要的。
【讨论】:
阀门是特定于 tomcat 的。过滤器是标准的,它们的行为由规范定义。在大多数情况下,您需要一个过滤器。
阀门仅用于需要访问本地 tomcat API 的功能。这是相当罕见的。
【讨论】: