spring mvc 中web.xml配置信息解释
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰。
首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -> filter -> servlet
同时还存在着这样一种配置节:context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文中的信息,那么 context-param 配置节是不是应该写在 listener 配置节前呢?实际上 context-param 配置节可写在任意位置,因此真正的加载顺序为:context-param -> listener -> filter -> servlet
对于某类配置节而言,与它们出现的顺序是有关的。以 filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的。
servlet 同 filter 类似,此处不再赘述。
由此,可以看出,web.xml 的加载顺序是:context-param -> listener -> filter -> servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。
相关文章
- [Spring]第六篇:Spring_AOP使用注解方式(掌握)和XML配置(了解)两种方式实现
- spring boot配置@Async
- spring boot 配置redis
- Spring Cloud Eureka 服务注册列表显示 IP 配置问题
- [转]@Transactional spring 配置事务 注意事项
- Spring-MVC配置Gson做为Message Converter解析Json
- spring 创建数据源,由spring容器来创建,运行,维护的配置操作
- spring cloud 远程仓库配置文件(yml或properties)中有server.port参数就无法访问,这是一个大坑吗?
- Spring Boot(十二):Spring Boot 如何测试打包部署
- Spring 依赖注入方式详解
- Spring Boot 日志配置详解,还有谁不会?!
- Spring Boot 3.0 M1 发布,正式弃用 Java 8,最低要求 Java 17。。。
- Spring Cloud 如何动态刷新 Git 仓库配置?
- Spring监听器配置
- 转载 Spring、Spring MVC、MyBatis整合文件配置详解
- MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql
- Spring dbcp连接池简单配置 示例
- Spring中基于Java的配置@Configuration和@Bean用法
- spring成神之路第四十五篇:带你吃透 Spring 事务 7 种传播行为
- 各种 Spring-Boot-Starters系列 介绍
- Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
- Spring Boot2 系列教程(七)理解自动化配置的原理
- 初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
- spring 的 transactionManager 事务管理器 配置
- Java 记录(10) MongoUtils : spring-boot 配置 mongo
- 我只能说,Spring Data REST真的很燥辣
- Junit单元测试的简单使用(主要是在spring框架下的项目)