Java 过滤器的调用顺序是什么?
假设我的web.xml中有以下内容Java 过滤器的调用顺序是什么?,java,jakarta-ee,servlets,servlet-filters,Java,Jakarta Ee,Servlets,Servlet Filters,假设我的web.xml中有以下内容 <filter-mapping> <filter-name>F1</filter-name> <url-pattern>/XYZ/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>F2</filter-name> <url-pattern&
<filter-mapping>
<filter-name>F1</filter-name>
<url-pattern>/XYZ/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>F2</filter-name>
<url-pattern>/XYZ/abc.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>F3</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
一层楼
/XYZ/*
地上二层
/XYZ/abc.do
F3
/*
如果请求以/XYZ/abc.do.的形式出现,那么调用过滤器的顺序是什么?为什么?按照它们在web.xml中定义映射的顺序 如果使用注释(
@WebFilter
),则顺序-您仍然必须在web.xml中声明
条目。第6.2.4节:
当使用
样式处理
元素时,容器必须使用第12章“将请求映射到servlet”中定义的路径映射规则确定
是否与请求URI匹配
容器用于构建过滤器链以应用于特定请求URI的顺序如下:
匹配过滤器映射的顺序与这些元素在部署描述符中出现的顺序相同
将按照这些元素在部署描述符中出现的相同顺序匹配过滤器映射
和
,则容器必须将筛选器映射扩展为多个筛选器映射(每个
和
对应一个),以保留
和
元素的顺序
简而言之:它们是按照它们在XML文件中出现的顺序应用的。如果您点击了一个同时被
和
绑定过滤器覆盖的URL,这会很有趣,因为所有URL模式绑定过滤器都会在所有servlet名称绑定过滤器之前应用。我从来没有遇到过这种情况(根本没有见过任何与servlet名称绑定的过滤器),但我认为这可能会很混乱。那么它是F1、F2、F3?如果是servlet呢?假设我有1个模式匹配2个servlet?它匹配多少servlet/uri并不重要。当前目标资源只有一个,对于它,将按照映射声明的顺序调用过滤器。(所以是的-F1,F2,F3)是的,我知道了。但是现在我在问一个完全不同的场景,相同的url模式匹配到两个不同的servlet s1和s2。将调用哪个servlet?这个问题独立于筛选器。如果它是独立的,请问另一个问题;)(并在这一条上标记一个已接受的答案)好的,完成。你现在能发表评论吗?