1 回答

TA貢獻1776條經驗 獲得超12個贊
來自醫生
Web 應用程序可以定義任意數量的 DispatcherServlet。每個 servlet 將在自己的命名空間中運行,加載自己的應用程序上下文以及映射、處理程序等。只有由 ContextLoaderListener 加載的根應用程序上下文(如果有)才會被共享。
多個調度程序 servlet 的優點或者為什么我們需要多個調度程序 servlet?
簡單的答案是以多種形式擁有DispatcherServlet 的功能
調度程序 servlet 功能
Dispatcher Servlet 使用HandlerMapping實現來控制將請求路由到處理程序對象。默認為BeanNameUrlHandlerMapping和RequestMappingHandlerMapping。
它的視圖解析策略可以通過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 簡單 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. DS2 的
TilesViewResolver
其實現由 apachetiles 提供,這是一個基于布局/骨架的插件高級功能,如下所示。
或者,如果我們對不同的 URL
匿名用戶集使用具有不同布局的 TilesViewResolver -
登錄用戶的不同布局 - 不同的布局
優點 3:我們可以為不同的 URL 集使用不同的主題解析器。
這些解析器持續監視 cookie/會話來解析主題并提供合格的樣式表/主題(如下圖所示)。下面給出了CookieThemeResolver的結果的示例。
注意:這不是關于主題配置,而是關于主題解析器配置。
優點 4:我們可以為不同的 URL 集使用不同的區域設置解析器。
這些解析器持續監視 cookie/session/accept-header 以解析區域設置并加載合格的應用程序消息(如下圖所示)。下面給出了CookieLocaleResolver的結果的示例。
注意:這不是關于區域設置配置,而是關于區域設置解析器配置。
添加回答
舉報