调用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链的顺序如下:
首先,
匹配filter的映射顺序与这些元素在部署描述符中出现的顺序相同。
接下来,
匹配filter的映射顺序与这些元素在部署描述符中出现的顺序相同。
如果filter映射包含
和
,则容器必须将filter映射扩展为多个filter映射(每个
和
),保留顺序
和
元素。
简而言之:它们按照它们出现在XML文件中的顺序应用。 如果你点击了
和
绑定filter所覆盖的URL,那会很有趣,因为所有的URL模式绑定filter都会在所有servlet-name绑定filter之前应用。 我从来没有遇到这种情况(根本没有看到任何servlet-name绑定filter),但我认为它可能会让人很困惑。