我刚刚发现,在Spring应用程序中可以有多个dispatcher-servlets。我想知道采用这种方法,而不是对所有传入请求使用单个dispatcher-servlet的传统spring方法是否有任何优势。

最佳答案

从文件


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


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

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

分派器Servlet功能




分派器Servlet使用HandlerMapping实现来控制将请求路由到处理程序对象。默认值为BeanNameUrlHandlerMappingRequestMappingHandlerMapping
可以通过ViewResolver实现指定视图解析策略,将符号视图名称解析为View对象。默认值为InternalResourceViewResolver
可以通过HandlerExceptionResolver指定异常的解决策略,例如,将某些异常映射到错误页面。
解决多部分请求的策略由MultipartResolver实现决定。
它的语言环境解析策略由LocaleResolver决定。
它的主题解析策略由ThemeResolver确定。



我将尝试解释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简单网址处理程序映射配置

<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的地方。
DS2的TilesViewResolver
其实现由apache tile提供,这是基于布局/骨架的插件高级功能,如下所示。
java - 在Spring MVC中使用多个分派(dispatch)器Servlet的优缺点-LMLPHP
或者,如果我们对不同的URL集使用TilesViewResolver具有不同的布局
匿名用户-不同的布局
登录的用户-不同的布局

优势3:我们可以为不同的URL集使用不同的主题解析器。
这些解析器持续监控cookie /会话以解析主题,并提供样式表/主题合格的图片(如下图所示)。下面仅给出CookieThemeResolver结果的示例。
注意:这与主题配置无关,而与主题解析程序配置有关。

java - 在Spring MVC中使用多个分派(dispatch)器Servlet的优缺点-LMLPHP

优势4:我们可以为不同的URL集使用不同的语言环境解析器。
这些解析器连续监视cookie / session / accept-header以解析语言环境并加载合格的应用程序消息(如下图所示)。下面仅给出CookieLocaleResolver结果的示例。
注意:这与语言环境配置无关,而与语言环境解析器配置有关。
java - 在Spring MVC中使用多个分派(dispatch)器Servlet的优缺点-LMLPHP

09-10 08:11
查看更多