如果我们有多个XML配置文件,DispatcherServlet如何工作?

时间:2010-10-29 18:48:02

标签: java spring architecture

问题

如果我们有多个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.xmlap-servlet.xml file都有相同的bean名称,但是它们会指向不同包中的Controllers,所以例如,em会指向{{1} }和ap将指向com.em.DomainController

所以我的问题是

如何将请求映射到不同的控制器以及如何识别请求,以便从ap-servlet.xml或em-servlet.xml读取? < / p>

我希望能够清楚地陈述我的问题。

2 个答案:

答案 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对此有很好的支持。

如果你的目标是让一个应用程序实例为所有这些语言/语言环境提供请求,那么听起来你可以省去很多这种冗余。

相关问题