网站首页 > 技术教程 正文
版本:spring 3.0以上
项目中有两个spring的配置xml,如下
项目中的web.xml
web.xml的配置如下:
1、ContextLoaderListener加载applicationContext-service-database.xml
2、DispatcherServlet加载database-servlet.xml。如果不配置contextConfigLocation的话,DispatcherServlet会默认查找${project.dir}\src\main\webapp\WEB-INF\{servlet-name}-servlet.xml。
如本例:servlet-name=database,则文件名为database-servlet.xml,所有会查找${project.dir}\src\main\webapp\WEB-INF\database-servlet.xml
3、这样配置最终spring会产生两个容器,ContextLoaderListener会生成容器A,DispatcherServlet会生成容器B,容器B的父容器是容器A,容器A的父容器为null
4、容器B会继承容器A的部分功能(其实这样做主要是为了防止单例bean的重复注入和容器B可以获取到容器A的bean,这样进行bean共享,但是容器A获取不到容器B的bean)
5、这样的配置spring mvc就有了,不需要在database-servlet.xml中配置<mvc:annotation-driven/>
问题:
如果在applicationContext-service-database.xml配置<mvc:annotation-driven/>,而在database-servlet.xml没有配置<mvc:annotation-driven/>,这样就会导致spring mvc功能失效,访问地址会404
原因:
因为如果在applicationContext-service-database.xml配置<mvc:annotation-driven/>,就会导致ContextLoaderListener加入容器A提前把spring mvc加载到容器A中,但是此时容器A,并没有database-servlet.xml中对应需要向外暴露的接口、url或controller。当DispatcherServlet加载容器B的时候发现,它的父容器A中已经存在spring mvc的相关功能,就不会重复加载,所以就会导致spring mvc的功能失效
关键代码:
这只是spring mvc 其中一个功能,其他相关功能请查看DispatcherServlet中init*方法
解决办法:
不要在ContextLoaderListener加载任何与spring mvc相关的功能
最后
ContextLoaderListener就是为了加载公用的类而存在的
一般ContextLoaderListener只有一个,而DispatcherServlet可以有多个,每个DispatcherServlet都会默认的以ContextLoaderListener加载的容器为父容器。
所以请按照spring 的套路来,减少不必须的问题
猜你喜欢
- 2024-10-19 Java 项目编译提示 javax.xml.bind.annotation does not exist 错误
- 2024-10-19 Android annotation包下常用的注解
- 2024-10-19 SpringMVC疑难一:mvc:annotation-dr
- 2024-10-19 Spring 中 AnnotationConfigUtils
- 2024-10-19 为什么都爱着江南?黛瓦白墙,烟雨朦胧,是文人魂牵梦绕的故乡
- 2024-10-19 Spring框架系列之构造方法底层剖析01
- 2024-10-19 基于.NET6包含DDD,ES,CQRS等概念的开源
- 2024-10-19 spring 中 AnnotationUtils 的常用方法
- 2024-10-19 SpringBoot实战4-Spring基础-IoC容器
- 2024-10-19 Intellij IDEA安装并使用阿里p3c代码规约插件
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
- 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
- 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
- 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
- 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- 最近发表
-
- Excel计算工龄和年份之差_excel算工龄的公式year
- Excel YEARFRAC函数:时间的"年份比例尺"详解
- 最常用的10个Excel函数,中文解读,动图演示,易学易用
- EXCEL中如何计算截止到今日(两个时间中)的时间
- 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- Excel日期函数之DATEDIF函数_excel函数datedif在哪里
- Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)

本文暂时没有评论,来添加一个吧(●'◡'●)