在哪些情况下,我们需要多个Dispatcher Servlet? 谁能告诉我多个Dispatcher Servlet的用例。 我认为每个用例都可以通过使用单个Dispatcher Servlet来解决。
答案 0 :(得分:0)
严格分开用户和管理员功能。或者一个用于纯Spring MVC,另一个用于Spring Web Flow。一些控制器的主要配置差异。 (我们实际上使用了Spring MVC和Spring Web Flow分隔符,以便我们可以添加它而不影响已经存在的配置)。如今,使用Servlet 3.0,您可以分别开发应用程序的各个部分,并让它们全部在其中贡献自己的DispatcherServlet和映射(尽管您也可以使用一些配置约定来实现这一点)。
答案 1 :(得分:0)
由于DispatcherServlet非常灵活。 Spring MVC不仅使用它,而且Spring WS等也使用它。
通常,当我们需要多套MVC配置时,我们声明多个调度程序servlet。 例如,我们可能在传统的MVC应用程序旁边或者在网站的不安全部分中使用REST API:
答案 2 :(得分:0)
来自文档
一个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>
优点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提供,这是基于布局/骨架的插件高级功能,如下所示。
或者,如果我们对不同的URL集使用具有不同布局的TilesViewResolver
匿名用户-不同的布局
登录的用户-不同的布局
优点3: 我们可以为不同的URL集使用不同的主题解析器。
这些解析器持续监视cookie /会话以解析主题并提供符合样式表/主题的条件(如下图所示)。下面仅举例说明CookieThemeResolver的结果。
注意:这与主题配置无关,而与主题解析器配置有关。
优点4: 我们可以为不同的URL集使用不同的语言环境解析器。
这些解析器连续监视cookie / session / accept-header以解析语言环境并加载合格的应用程序消息(如下图所示)。下面仅举例说明CookieLocaleResolver的结果。
注意:这与语言环境配置无关,而与语言环境解析器配置有关。