多个应用程序上下文,多个调度程序servlet?

时间:2012-08-21 16:33:57

标签: spring servlets

到目前为止,我曾经认为Web应用程序只能有一个我们在web.xml中定义的调度程序servlet我是否正确地这样思考?你能在一个Web应用程序中拥有多个调度程序servlet吗?怎么样?我们可能需要这种情况是什么?此外,整个Web应用程序中只能有一个应用程序上下文吗?我们如何定义多个应用程序上下文?调度程序servlet是否可以存在于非Spring应用程序中?

2 个答案:

答案 0 :(得分:27)

  

您可以在单个Web应用程序中拥有多个调度程序servlet吗?

当然,引用official documentation粗体实际上也存在!)

  

Web应用程序可以定义任意数量的DispatcherServlet 。每个servlet都将在自己的命名空间中运行,使用映射,处理程序等加载自己的应用程序上下文。只有ContextLoaderListener加载的根应用程序上下文(如果有)才会被共享。


  

如何?

使用org.springframework.web.servlet.DispatcherServlet类声明几个名称不同的servlet。还要确保yourServletName-servlet.xml文件可用。


  

我们可能需要这种情况吗?

DispatcherServlet非常灵活。不仅Spring MVC使用它,还有Spring WS,Spring支持等等。


  

此外,整个Web应用程序中只能有一个应用程序上下文吗?

已经回答了引用文档:每个DispatcherServlet一个应用程序上下文+一个主Web应用程序上下文。


  

我们如何定义多个应用程序上下文?

见上文,只需创建多个DispatcherServlet s。


  

调度程序servlet是否可以存在于非Spring应用程序中?

DispatcherServlet是一个Spring上下文(Spring应用程序),因此:no。在手上DispatcherServlet可以在没有父(主)应用程序上下文的应用程序中声明,因此:是。

答案 1 :(得分:1)

  

在什么情况下我们可能需要此服务?

OR
 多个调度程序servlets OR
的优点  为什么我们需要多个调度程序servlet?

简单的答案是具有几种形式的DispatcherServlet's功能

分派器servlet功能



我将尝试解释DispatcherServlet

提供的某些功能

声明多个调度程序servlet
假设我们有两个调度程序servlet(DS),其中DS1,DS2配置有不同的URL模式(**.simple, **.beanName),并且它们使用下面提供的不同的调度程序servlet配置。

DispatcherServlet     - simpleUrlHandlerDispatcherServlet
contextConfigLocation - /WEB-INF/simpleUrlHandlerMapping.xml
<url-pattern>*.simple</url-pattern>

DispatcherServlet     - beanNameUrlHandlerDispatcherServlet
contextConfigLocation - /WEB-INF/beanNameUrlHandlerMapping.xml
<url-pattern>*.beanName</url-pattern>

优点1: 我们可以为不同的URL集使用不同的HandlerMapping

DS1 bean名称url处理程序映射配置

<bean name="/hello.beanName" class="com.pvn.mvc.HelloController" />
<bean name="/hi.beanName" class="com.pvn.mvc.HiController" />

DS2简单的URL处理程序映射配置

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/hello.simple">simpleHello</prop>
            <prop key="/hi.simple">simpleHi</prop>
        </props>
    </property>
</bean>

优点2: 我们可以为不同的URL集使用不同的视图解析器。

用于DS1的InternalResourceViewResolver
仅处理prefix + returned String + suffix的地方。
TilesViewResolver for DS2
其实现由apache tile提供,这是基于布局/骨架的插件高级功能,如下所示。
enter image description here 或者,如果我们对不同的URL集使用具有不同布局的TilesViewResolver
匿名用户-不同的布局
登录的用户-不同的布局

优点3: 我们可以为不同的URL集使用不同的主题解析器。
这些解析器持续监视cookie /会话以解析主题并提供符合样式表/主题的条件(如下图所示)。下面仅举例说明CookieThemeResolver的结果。
注意:这与主题配置无关,而与主题解析器配置有关。

enter image description here

优点4: 我们可以为不同的URL集使用不同的语言环境解析器。
这些解析器连续监视cookie / session / accept-header以解析语言环境并加载合格的应用程序消息(如下图所示)。下面仅举例说明CookieLocaleResolver的结果。
注意:这与语言环境配置无关,而与语言环境解析器配置有关。
enter image description here