我刚刚发现您可以在Spring应用程序中使用multiple dispatcher-servlets
。我想知道采用这种方法而不是对所有传入请求都使用single dispatcher-servlet
的传统spring方法是否有任何优势。
来自文档
Web应用程序可以定义任意数量的DispatcherServlet。每个servlet将在其自己的名称空间中运行,并使用映射,处理程序等加载其自己的应用程序上下文。只有ContextLoaderListener加载的根应用程序上下文(如果有)将被共享。
简单的答案是具有几种形式的DispatcherServlet's功能
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>
Advantage 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处理程序映射配置
我们可以为不同的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:
InternalResourceViewResolver
for DS1它只处理prefix + returned String + suffix
。TilesViewResolver for DS2其实现由apache tile提供,这是基于布局/骨架的插件高级功能,如下所示。或者,如果我们对不同的URL集使用TilesViewResolver具有不同的布局匿名用户-不同的布局登录的用户-不同的布局优势3:
我们可以为不同的URL集使用不同的主题解析器。这些解析器持续监视cookie /会话以解析主题并提供符合样式表/主题的条件(如下图所示)。下面仅给出CookieThemeResolver结果的示例。注意:这与主题配置无关,但与主题解析器配置有关。优势4:
我们可以为不同的URL集使用不同的语言环境解析器。这些解析器连续监视cookie / session / accept-header以解析语言环境并加载合格的应用程序消息(如下图所示)。下面仅给出CookieLocaleResolver结果的示例。注意:这与语言环境配置无关,而与语言环境解析器配置有关。