springmvc中使用多个dispatcher servlet的优缺点
Advantages and disadvantages of using multiple dispatcher servlets in spring mvc
我刚刚发现您可以在 spring 应用程序中有 多个 dispatcher-servlets
。我想知道采用这种方法是否比传统的 spring 方法有任何优势,对所有传入请求使用 单个 dispatcher-servlet
。
来自文档
A web application can define any number of DispatcherServlets. Each servlet will operate in its own namespace, loading its own application context with mappings, handlers, etc. Only the root application context as loaded by ContextLoaderListener, if any, will be shared.
多个调度程序 servlet 的优点 或 为什么我们需要多个调度程序 servlet?
简单的答案是以多种形式具有 DispatcherServlet's 功能
调度程序 servlet 功能
- Dispatcher Servlet 使用 HandlerMapping implementation to control the routing of requests to handler objects. Default is BeanNameUrlHandlerMapping and RequestMappingHandlerMapping。
- 它的视图解析策略可以通过 ViewResolver implementation, resolving symbolic view names into View objects. Default is 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>
优势一: 我们可以针对不同的集合URL[=117设置不同的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 集合使用不同的视图解析器.
InternalResourceViewResolver 用于 DS1
它只处理 prefix + returned String + suffix
.
TilesViewResolver DS2
它的实现由 apache tiles 提供,它是一个基于 layout/skeleton 的插件高级功能,如下所示。
或者,如果我们对 URL 的
的不同集合使用具有不同布局的 TilesViewResolver
匿名用户 - 不同的布局
登录用户 - 不同布局
优点3: 我们可以为不同的URL组设置不同的主题解析器.
这些解析器持续监控 cookie/session 以解析主题并提供 stylesheet/theme 合格的服务(如下图所示)。下面给出了 CookieThemeResolver.
结果的示例
注意:这不是关于主题配置,而是关于主题解析器配置。
优点 4: 我们可以为不同的 URL 集使用不同的语言环境解析器.
这些解析器持续监控 cookie/session/accept-header 以解析语言环境并加载符合条件的应用程序消息(如下图所示)。下面给出了 CookieLocaleResolver.
结果的示例
注意:这不是关于语言环境配置,而是关于语言环境解析器配置。
我刚刚发现您可以在 spring 应用程序中有 多个 dispatcher-servlets
。我想知道采用这种方法是否比传统的 spring 方法有任何优势,对所有传入请求使用 单个 dispatcher-servlet
。
来自文档
A web application can define any number of DispatcherServlets. Each servlet will operate in its own namespace, loading its own application context with mappings, handlers, etc. Only the root application context as loaded by ContextLoaderListener, if any, will be shared.
多个调度程序 servlet 的优点 或 为什么我们需要多个调度程序 servlet?
简单的答案是以多种形式具有 DispatcherServlet's 功能
调度程序 servlet 功能
- Dispatcher Servlet 使用 HandlerMapping implementation to control the routing of requests to handler objects. Default is BeanNameUrlHandlerMapping and RequestMappingHandlerMapping。
- 它的视图解析策略可以通过 ViewResolver implementation, resolving symbolic view names into View objects. Default is 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>
优势一: 我们可以针对不同的集合URL[=117设置不同的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 集合使用不同的视图解析器.
InternalResourceViewResolver 用于 DS1
它只处理 prefix + returned String + suffix
.
TilesViewResolver DS2
它的实现由 apache tiles 提供,它是一个基于 layout/skeleton 的插件高级功能,如下所示。
的不同集合使用具有不同布局的 TilesViewResolver
匿名用户 - 不同的布局
登录用户 - 不同布局
优点3: 我们可以为不同的URL组设置不同的主题解析器.
这些解析器持续监控 cookie/session 以解析主题并提供 stylesheet/theme 合格的服务(如下图所示)。下面给出了 CookieThemeResolver.
结果的示例
注意:这不是关于主题配置,而是关于主题解析器配置。
优点 4: 我们可以为不同的 URL 集使用不同的语言环境解析器.
这些解析器持续监控 cookie/session/accept-header 以解析语言环境并加载符合条件的应用程序消息(如下图所示)。下面给出了 CookieLocaleResolver.
结果的示例
注意:这不是关于语言环境配置,而是关于语言环境解析器配置。