Spring學習總結(2.2)-Spring MVC:DispatcherServlet,quartz2.2.1spring

來源:互聯網
上載者:User

Spring學習總結(2.2)-Spring MVC:DispatcherServlet,quartz2.2.1spring

    DispatcherServlet是SpringMVC的前端控制器,換句話說它是SpringMVC的入口。即所有的請求都要經過它才能流轉,所以稱它為中央控制器也是可以的。這篇部落格想要講的是,它作為中央控制器是如何流轉或者說分發請求的。
配置
<servlet>        <servlet-name>action</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>           <param-value>/WEB-INF/spring-mvc.xml,classpath:config/applicationContext-common.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>        <servlet-mapping>        <servlet-name>action</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>

    以上是DispatcherServlet的配置,和平常的Servlet配置沒什麼差別。從servlet-mapping的配置知道,它攔截了所有請求。當然,springMVC允許配置多個DispatcherServlet,只是每一個都會帶著自己的WebApplicationContext也就是對應的處理請求的bean的配置,裡面主要是Controller,HandlerMapping,ViewResolver。這裡這麼說可能還是不知道我說什麼,我們繼續往下看。
初始化    初始化的源碼如下:
protected void initStrategies(ApplicationContext context){        initMultipartResolver(context);        initLocaleResolver(context);        initThemeResolver(context);        initHandlerMappings(context);        initHandlerAdapters(context);        initHandlerExceptionResolvers(context);        initRequestToViewNameTranslator(context);        initViewResolvers(context);        initFlashMapManager(context);   }

DispatcherServlet的初始化過程就是從容器裡取得了一系列的Bean持有,基本的內容如下:
①初始化上傳檔案解析器(直譯為多部分請求解析器) 
②初始化本地化解析器 
③初始化主題解析器 
④初始化處理器映射器 
⑤初始化處理器適配器 
 ⑥初始化處理器異常解析器 
 ⑦初始化請求到視圖名翻譯器 
 ⑧初始化視圖解析器 
    initStrategies()方法會在DispatcherServlet對應的WebApplicationContext初始化後自動執行,此時DispatcherServlet上下文中的Bean已經初始化完畢。該方法的工作事先通過一定的發現機制查詢上下文中的組件Bean,如果找不到則裝配預設的組件執行個體。 
    Spring MVC定義了一套預設的組件實作類別,也就是說即使不在Spring容器中顯式配置組件Bean,也會有一套可用的預設組件出現在DispatcherServlet中。Spring在spring.jar包的org/springframework/web/servlet類路徑定義了一個DispatcherServlet.properties設定檔,在其中指定了組件的預設實作類別。
    這裡還有一個比較重要的內容就是WebApplicationContext的層次關係。全域的WebApplicationContext與DispatcherServlet的WebApplicationContext之間是父子關係,子可以擷取到,覆寫父中定義的Bean,反之不行。也就是說,DispatcherServlet享有了Spring提供的服務。或者說它繼承了Spring的一切特性。
DispatcherServlet組件說明

    這部分可以對應著SpringMVC的基本流程圖來看,其中①上傳檔案解析器 ②本地化解析器 ③主題解析器 圖裡沒有體現,除了上傳檔案解析器知道是上傳檔案使用的,剩下兩個目前也還沒有查它們什麼功能。這裡就結合圖說說相關的其他解析器的作用。


HandlerMapping    首先,我們知道真正處理請求的Bean,也就是Controller都是在WebApplicationContext容器裡面的。這個HandlerMapping的作用就是根據你的請求地址,去容器中擷取對應的Controller的。我們可以指定HandlerMapping,如果沒有指定就預設使用使用BeanNameUrlHandlerMapping實作類別。
HandlerAdapter    HandlerAdapter將會把處理器封裝為適配器,從而支援多種類型的處理器,即適配器設計模式的應用,從而很容易支援很多類型的處理器;如SimpleControllerHandlerAdapter將對實現了Controller介面的Bean進行適配,並且掉處理器的handleRequest方法進行功能處理;
ViewResolver    ViewResolver將把邏輯視圖名解析為具體的View,通過這種策略模式,很容易更換其他視圖技術;如InternalResourceViewResolver將邏輯視圖名映射為jsp視圖
小結:DispatcherServlet作為中央控制器,它通過持有了WebApplicationContext就持有了所有它工作所需要的Bean。剩下的就是根據請求去獲得或者組裝需要的處理器就好了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.