阀门和过滤器的区别

33
有人能解释一下Servlet Filter和Tomcat Valve之间的区别吗?使用其中一个有什么优势?

有时您需要一个阀来执行特定于Tomcat的任务,例如在Netscaler后面进行SSL加速。请参见http://blog.inuus.com/vox/2009/04/tomcat-and-ssl-accelerators.html。 - Baq Haidri
3个回答

54

来自Tomcat文档:

Valve元素表示将插入关联Catalina容器的请求处理流水线中的组件。

Servlet过滤器具有完全相同的作用,但是阀门是Tomcat的特定类,与Tomcat基础设施/API紧密耦合。 另一方面,所有兼容的Web容器都实现了servlet API。 也就是说,阀门无法与例如Jetty一起使用,后者具有不同的API,而servlet过滤器可以。

另一个重要区别是:阀门在容器级别上工作(拦截所有应用程序/请求),而servlet过滤器仅拦截给定应用程序的所有请求。 因此,如果要实现服务器范围的拦截器,则需要使用阀门。


在应用服务器(如jboss)中部署Web应用程序时,我应该使用过滤器来执行特定于Web应用程序的操作,而不是使用阀门吗? - Sivakumar
3
我甚至会说:除非你真的需要阀门(例如查看Logback Access),否则你应该始终使用Servlet过滤器。 - Tomasz Nurkiewicz
3
我认为你所说的过滤器只拦截特定应用程序的所有请求是不正确的。Tomcat文档中写道:“Tomcat提供了许多过滤器,可以在$CATALINA_BASE/conf/web.xml中配置以与所有Web应用程序一起使用,也可以通过在应用程序的WEB-INF/web.xml中对它们进行配置来为每个Web应用程序配置过滤器。下面描述了每个过滤器。”一个过滤器可以配置为与所有应用程序一起使用。 - Silver

11

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

只有在需要访问本机Tomcat API的功能中才应使用阀门。这相当罕见。


如果我想添加日志记录以查找每个HTTP请求处理所需的时间,我应该使用什么? - Kevin Meredith

4
并不完全正确。使用过滤器可以通过url-pattern影响应用程序、引擎或主机的某些部分;而阀门只能影响所有应用程序、引擎或主机的所有部分,无法指定url-pattern。以上为全部内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接