有人能解释一下Servlet Filter和Tomcat Valve之间的区别吗?使用其中一个有什么优势?
来自Tomcat文档:
Valve元素表示将插入关联Catalina容器的请求处理流水线中的组件。
Servlet过滤器具有完全相同的作用,但是阀门是Tomcat的特定类,与Tomcat基础设施/API紧密耦合。 另一方面,所有兼容的Web容器都实现了servlet API。 也就是说,阀门无法与例如Jetty一起使用,后者具有不同的API,而servlet过滤器可以。
另一个重要区别是:阀门在容器级别上工作(拦截所有应用程序/请求),而servlet过滤器仅拦截给定应用程序的所有请求。 因此,如果要实现服务器范围的拦截器,则需要使用阀门。
阀门是特定于Tomcat的。 过滤器是标准的,它们的行为由规范定义。 在大多数情况下,您将需要一个过滤器。
只有在需要访问本机Tomcat API的功能中才应使用阀门。这相当罕见。