1 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個贊
來自醫(yī)生
Web 應(yīng)用程序可以定義任意數(shù)量的 DispatcherServlet。每個 servlet 將在自己的命名空間中運(yùn)行,加載自己的應(yīng)用程序上下文以及映射、處理程序等。只有由 ContextLoaderListener 加載的根應(yīng)用程序上下文(如果有)才會被共享。
多個調(diào)度程序 servlet 的優(yōu)點(diǎn)或者為什么我們需要多個調(diào)度程序 servlet?
簡單的答案是以多種形式擁有DispatcherServlet 的功能
調(diào)度程序 servlet 功能
Dispatcher Servlet 使用HandlerMapping實(shí)現(xiàn)來控制將請求路由到處理程序?qū)ο?。默認(rèn)為BeanNameUrlHandlerMapping和RequestMappingHandlerMapping。
它的視圖解析策略可以通過ViewResolver實(shí)現(xiàn)來指定,將符號視圖名稱解析為 View 對象。默認(rèn)為InternalResourceViewResolver。
它的異常解決策略可以通過HandlerExceptionResolver指定,例如將某些異常映射到錯誤頁面。
它解決多部分請求的策略由MultipartResolver實(shí)現(xiàn)決定。
它的區(qū)域設(shè)置解析策略由LocaleResolver確定。
它的主題解析策略由ThemeResolver決定。
我將嘗試解釋 提供的一些功能DispatcherServlet
聲明多個調(diào)度程序 servlet
考慮我們有兩個調(diào)度程序 servlet(DS),其中 DS1、DS2 配置有不同的 url 模式 (?**.simple, **.beanName
),并且它們使用不同的調(diào)度程序 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>
優(yōu)點(diǎn) 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>
優(yōu)點(diǎn) 2:我們可以為不同的 URL 集使用不同的視圖解析器。
DS1 的InternalResourceViewResolver
僅處理prefix + returned String + suffix. DS2 的
TilesViewResolver
其實(shí)現(xiàn)由 apachetiles 提供,這是一個基于布局/骨架的插件高級功能,如下所示。
或者,如果我們對不同的 URL
匿名用戶集使用具有不同布局的 TilesViewResolver -
登錄用戶的不同布局 - 不同的布局
優(yōu)點(diǎn) 3:我們可以為不同的 URL 集使用不同的主題解析器。
這些解析器持續(xù)監(jiān)視 cookie/會話來解析主題并提供合格的樣式表/主題(如下圖所示)。下面給出了CookieThemeResolver的結(jié)果的示例。
注意:這不是關(guān)于主題配置,而是關(guān)于主題解析器配置。
優(yōu)點(diǎn) 4:我們可以為不同的 URL 集使用不同的區(qū)域設(shè)置解析器。
這些解析器持續(xù)監(jiān)視 cookie/session/accept-header 以解析區(qū)域設(shè)置并加載合格的應(yīng)用程序消息(如下圖所示)。下面給出了CookieLocaleResolver的結(jié)果的示例。
注意:這不是關(guān)于區(qū)域設(shè)置配置,而是關(guān)于區(qū)域設(shè)置解析器配置。
添加回答
舉報