日期:2014-05-20  浏览次数:20748 次

spring mvc的xml文件加载问题。
spring 官方文档上写的是DispatcherServlet会加载一个(name)-servlet.xml的文件,并且这个文件需要被放在/WEB-INF/下。
但是我在别的书上看到有别的方法,定义contextLoaderListener,然后定义contextConfigLocation,如果需要加载多个xml文件,可以用逗号或空格分开.
我现在实在有点晕了,到底contextLoaderListener需不需要定义啊?还是我可以直接在/WEB-INF/下面放个(name)-servlet.xml就行了?

------解决方案--------------------
这个需要定义,如果你不定义contextLoaderListener,他就不能监听到容器啦,并且监听的同时你要配置全局的参数contextConfigLocation,就是在<context><init-..省略/></context>里面配置的,他的作用是去寻找配置你定义的配置文件,并且通过contextLoaderListener去加载spring容器,初始化里面的bean。
还有一个就是DispatcherServlet里面的contextConfigLocation,这个是用来指定Spring MVC的配置文件地址的,别和上面的混淆了,他默认是读取web-inf下的spring-srevlet.xml,你可以指定他的位置,比如类路径都可以。

------解决方案--------------------
<servlet>
<servlet-name>applicationContext</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>applicationContext</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

DispatcherServlet 会去 web/info下找 applicationContext.xml
这个只是监听请求而已!
 加载 xml文件需要在 web.xml 
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!-- /WEB-INF/database.xml -->
/WEB-INF/applicationContext*.xml
</param-value>
</context-param>

给分啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!