spring学习笔记:spring mvc不得不说的几处配置

通常情况下会有这么几个配置文件:web.xml, applicationContext.xml, xxxx-servlet.xml,
在web.xml中通常会这么配置DispatcherServlet:
<servlet> <servlet-name>mvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!--init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/other-name.xml</param-value> </init-param--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
这个servlet默认会以<servlet-name>-servlet.xml为当前servlet的spring容器的配置文件,比如本例应该是mvc-servlet.xml,但是如果你不想这么命名,则要给这个servlet添加启动参数contextConfigLocation, 像上面被注释掉的一样。
web.xml中通常还有这样的配置:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
context-param是global参数,会被整个应用程序共享;spring mvc中配置的ContextLoaderListener正是通过读取contextConfigLocation这个全局参数,找到全局的spring容器配置文件。然后构建全局的WebApplicationContext,具体的过程由ContextLoader来操作,ContextLoader中initWebApplicationContext方法非常清晰地描述了这个过程. 这个全局的WebApplicationContext可以被所有的DispatcherServlet的spring容器访问,因为所有DispatcherServlet的spring容器都把这个全局的容器作为parent.这个过程描述在FrameworkServlet中; 不清楚的可以看一下源码。这样的父子容器的设计非常有好处:
业务层, 持久层的bean放在父容器中, 这样可以被所有展现层共享;配置文件也可以拆分得更清晰:XXXDao.xml, XXXService.xml  .....
展现层的bean放在各自servlet的spring容器中。
读了好多次代码,才总算把这个问题搞清楚了。

你可能感兴趣的:(spring,bean,mvc,servlet)