问题
如果我们有多个XML配置文件,DispatcherServlet如何工作,那么Spring Application Context如何加载它们并对它们起作用?
情境:
就我而言,我们有一个应用程序应该是全局的,应用程序应该有AP{Asia-Pacific}, EM{Europ-Middleeast}, CA{Canada} and LA{Latin America}
个版本。
目前,我们有一个EM
区域的应用程序及其XML Configuration File i.e, em-servelt.xml
,然后现在有web.xml
的通用AP region
文件我们有另一个ap-servlet.xml
1}}文件,顺便说一下,em-servlet.xml
和ap-servlet.xml file
都有相同的bean名称,但是它们会指向不同包中的Controllers,所以例如,em会指向{{1} }和ap将指向com.em.DomainController
。
所以我的问题是
如何将请求映射到不同的控制器以及如何识别请求,以便从ap-servlet.xml或em-servlet.xml读取? < / p>
我希望能够清楚地陈述我的问题。
答案 0 :(得分:26)
web.xml
文件可以配置多个DispatcherServlet
个实例,每个实例都有自己的配置。每个DispatcherServlet
实例都将WebApplicationContext
与其他DispatcherServlet
实例分开配置,因此您可以使用相同的bean名称,而不会影响其他应用程序上下文。
<!-- configured by WEB-INF/ap-servlet.xml -->
<servlet>
<servlet-name>ap</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- configured by WEB-INF/em-servlet.xml -->
<servlet>
<servlet-name>em</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
您还必须配置web.xml
以将请求映射到相应的DispatcherServlet
。例如,每个区域可以有不同的URL路径。
<servlet-mapping>
<servlet-name>ap</servlet-name>
<url-pattern>/ap/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>em</servlet-name>
<url-pattern>/em/*</url-pattern>
</servlet-mapping>
答案 1 :(得分:2)
web.xml
文件控制DispatcherServlet正在使用的上下文文件。如果您将web.xml
配置为DispatcherServlet
,其名称为em
,则默认情况下会使用em-servlet.xml
加载网络上下文。
您的问题对于您真正想做的事情有点令人困惑 - 您是否希望所有“版本”在应用程序的同一个实例中可用?
如果是这样,您描述的方法对于如何呈现多种语言/全球化您的应用程序听起来并不正统。传统上,您只需要一个应用程序实例和所有控制器/实例,然后处理在显示级别翻译用户可见消息。 Spring对此有很好的支持。
如果你的目标是让一个应用程序实例为所有这些语言/语言环境提供请求,那么听起来你可以省去很多这种冗余。