容器先初始化所有再初始化所有,且均按web.xml中声明顺序执行init;请求处理时按顺序执行filter,再调用匹配的servlet。

web.xml 中的 <filter></filter> 和 <servlet></servlet> 本身没有直接的“加载顺序”依赖,但它们的 初始化顺序 是有明确规则的:容器先初始化所有 <filter></filter>,再初始化所有 <servlet></servlet>。
filter 初始化早于 servlet
根据 Servlet 规范,Web 容器(如 Tomcat)在应用启动时按以下顺序处理:
- 解析 web.xml,收集所有
<filter></filter>和<servlet></servlet>声明 - 按 web.xml 中声明的**先后顺序**,依次调用每个
Filter.init() - 再按 web.xml 中声明的**先后顺序**,依次调用每个
Servlet.init()
也就是说,哪怕某个 servlet 在 web.xml 中写在 filter 前面,只要它被声明为 <servlet></servlet>,就不会比任何 <filter></filter> 先 init —— 规范强制要求 filter 优先就绪。
filter-mapping 和 servlet-mapping 决定执行顺序
真正影响请求处理流程的是映射(mapping)配置,而非声明顺序:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~