调用filter的顺序是什么?

假设我在我的web.xml中有以下内容

 F1 /XYZ/*   F2 /XYZ/abc.do   F3 /*  

如果请求以/XYZ/abc.do.And为什么,将调用filter的顺序是什么?

按顺序,它们的映射在web.xml中定义

如果使用注释( @WebFilter ),顺序似乎是未定义的 – 您仍然必须在web.xml中声明条目。

Servlet规范3.0的 6.2.4节:

使用样式处理元素时,容器必须使用第12章“将请求映射到Servlet”中定义的路径映射规则来确定是否与请求URI匹配。

容器用于构建要应用于特定请求URI的filter链的顺序如下:

  1. 首先, 匹配filter的映射顺序与这些元素在部署描述符中出现的顺序相同。

  2. 接下来, 匹配filter的映射顺序与这些元素在部署描述符中出现的顺序相同。

如果filter映射包含 ,则容器必须将filter映射扩展为多个filter映射(每个 ),保留顺序元素。

简而言之:它们按照它们出现在XML文件中的顺序应用。 如果你点击了绑定filter所覆盖的URL,那会很有趣,因为所有的URL模式绑定filter都会在所有servlet-name绑定filter之前应用。 我从来没有遇到这种情况(根本没有看到任何servlet-name绑定filter),但我认为它可能会让人很困惑。