2010-10-29 78 views
10

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

如何,如果我们有多个XML配置文件,那么,如何Spring应用上下文加载它们,并作用于他们的DispatcherServlet的工作?

场景:

在我的情况下,我们有一个应该是全球是应用程序应该有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文件的方式既em-servlet.xmlap-servlet.xml file将有相同的bean的名字,但他们会指向不同包中的控制器,例如,em会指向com.em.DomainController之类的东西,而ap将指向com.ap.DomainController

所以我的问题是

请求如何被映射到不同的控制器和要求是如何被认可的,这样就应该从AP-servlet.xml中或EM-servlet.xml中读?

我希望能够清楚地说明我的问题。

+0

这个问题有什么问题吗? – Rachel 2010-10-29 19:12:45

+0

这不是很清楚。你想达到什么目的?你想一次有几个'DispatcherServlet',或者什么? – axtavt 2010-10-29 19:45:24

回答

24

web.xml文件可以配置多个DispatcherServlet实例,每个实例都有自己的配置。每个DispatcherServlet实例配置一个与其他DispatcherServlet实例分开的WebApplicationContext,因此您可以使用相同的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> 
+0

这是有道理的。 – Rachel 2010-10-30 18:41:23

2

web.xml文件控制DispatcherServlet使用的上下文文件。如果您将web.xml配置为DispatcherServlet并且名称为em,则默认情况下它会使用em-servlet.xml加载Web上下文。

你的问题有点令人困惑,你真的想要做什么 - 你想让所有的“版本”在应用程序的同一个实例中可用吗?

如果是这样,那么您描述的方法对于如何呈现多种语言/全球化您的应用程序听起来并不正常。传统上,您只需要一个应用程序实例和所有控制器/实例,然后在显示级别处理翻译用户可见消息。 Spring对此有着出色的支持。

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

+0

我想让所有“版本”在应用程序的相同实例中可用? – Rachel 2010-10-29 20:24:50

+0

另外不同地区有不同的业务逻辑,所以我们不能在显示层面做到这一点 – Rachel 2010-10-29 20:25:25

相关问题