阀门和过滤器之间的区别

Siv*_*mar 30 tomcat servlets

有人可以解释servlet过滤器和tomcat阀之间的区别.使用一个优于另一个的优势是什么?

Tom*_*icz 43

从Tomcat文档:

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

servlet过滤器用于完全相同的目的,但阀门是Tomcat的特定类,与Tomcat infrastructure/API紧密耦合.另一方面,servlet API由所有兼容的Web容器实现.也就是说,阀门不能与例如具有不同API的Jetty一起使用,而servlet过滤器也是如此.

另一个重要区别是阀门正在处理容器级别(拦截所有应用程序/请求),而servlet过滤器只拦截给定应用程序的所有请求.因此,如果要实现服务器范围的拦截器,则需要阀门.

  • 我甚至会说:你应该**总是**使用servlet过滤器,除非你真的需要一个阀门(例如在[Logback Access](http://logback.qos.ch/access.html)查看阀门何时需要). (2认同)
  • 我认为你说过滤器只拦截给定应用程序的所有请求是不正确的.tomcat文档说:"Tomcat提供了许多过滤器,可以使用$ CATALINA_BASE/conf/web.xml配置为与所有Web应用程序一起使用,也可以通过在应用程序的WEB-INF/web中配置它们来为各个Web应用程序配置它们. .xml.每个过滤器如下所述." 可以配置过滤器以用于所有应用程序. (2认同)

Boz*_*zho 10

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

阀门仅用于需要访问native-tomcat API的功能.这是相当罕见的.