Skip to content

Latest commit

 

History

History
56 lines (39 loc) · 2.86 KB

12.Spring MVC WebApplicationContext.md

File metadata and controls

56 lines (39 loc) · 2.86 KB

#12.Spring MVC WebApplicationContext

###12.1 Servlet WebapplicationContext & Root WebApplicationContext

在Spring MVC中,__DispatcherServlet__用于接收请求并将请求分配到相应的__控制器(Controller)进行处理,我们可以称DispatcherServlet为__前端控制器

在一个Spring MVC应用中,可以存在任意多个__DispatcherServlet__,例如处理__RestFul-WS__、__SOAP-WS__或__普通Web请求__等不同的目的,每一个DispatcherServlet都拥有各自的WebApplicationContext上下文环境(用于定义与servlet级别相关的配置,例如controller,handler mapping,view resolving,i18n,theming,validation,type conversion和formatting的等等)。

在每一个WebApplicationContext底层,Spring MVC同时还维护着一个Root WebApplicationContext,Root WebApplicationContext定义应用级别(application-level)的上下文环境,例如底层数据源、安全、业务逻辑层、持久层等。Root WebAppilcationContext对所有的servlet级别(servlet-level)的WebApplicationContext都是可见的,反之则无效,也就是说,在Root WebApplicationContext定义的Bean对于所有的servlet-level的WebApplicationContext都是可见的,但是servlet-level的WebapplicationContext定义的Bean对Root WebApplicationContext卻不可见。

在Spring的官方文档中有这么一句话:

You simply need to wire up your business logic using an ApplicationContext and use a WebApplicationContext to integrate your web layer.

其中这个ApplicationContext指的就是Root WebApplicationContext。

###12.2 实例一

在使用STS创建Spring MVC项目时,STS会自动初始化web.xml配置文件,如下:

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Processes application requests -->
<servlet>
	<servlet-name>appServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>appServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

这里有两个配置文件,分别是root-context.xmlservlet-context.xml。对应的root-context.xml就是上节提到的Root WebApplicationContext,servlet-context.xml就是servlet级别的WebApplicationContext。

###12.3 参考资料

  • 《Pro Spring 3》
  • 《spring-framework-reference》