SpringMVC工作流程

web服務器在啓動時加載和解析web.xml找到SpringMVC的前段總控制器DispatcherServlet

通過DispatcherServlet加載相關的配置文件(默認是mvc-dispatcher-servlet.xml)並創建表現層的IOC容器(也就是子容器)

通過DispatchServelet 進行分發請求,調用處理器映射器HandlerMapping返回一個HandlerExecutionChain對象(一個執行鏈,這個對象中包含了Handler對象和HandlerIntercepter處理器攔截器)返回給DispatchServlet。

通過處理器適配器HandlerAdapter來找到與HandlerExcutionChain中的Handler處理器對象相同類型的Handler並返回一個ModelAndView(不論是否有異常都會返回ModelAndView)。

DispatcherServlet通過配置文件選擇對應的視圖解析器(ViewResolver)進行視圖解析返回一個View對象

DispatcherServlet通過view對象進行渲染視圖(渲染視圖的含義:通過解析視圖中的el表達式,特定標籤,特定轉換等,產生html頁面/片段或者JSON字符串甚至是圖片、pdf文檔等不同的媒體形式的過程)

最後服務器將視圖結果反饋給瀏覽器。

關鍵解析:

1.配置對象(在配置文件中註冊的對象)

1.1 DispatcherServlet

   SpringMVC框架中的總控制器,主要是創建表現層的IOC容器,並將請求分發給具體的控制器的Handler,又被稱爲請求分發器

1.2 InternalResourceViewResolver

   內部資源解析器 用來匹配jsp頁面(當然還有其他的這就不列舉了)

   InternalResourceViewResolver介紹

   它是URLBasedViewResolver的子類,所以URLBasedViewResolver支持的特性它都支持。在實際應用中                                       InternalResourceViewResolver也是使用的最廣泛的一個視圖解析器。

   那麼InternalResourceViewResolver有什麼自己獨有的特性呢?

      單從字面意思來看,我們可以把InternalResourceViewResolver解釋爲內部資源視圖解析器,

      這就是InternalResourceViewResolver的一個特性。InternalResourceViewResolver會把返回的視圖名稱都解析爲InternalResourceView對象,InternalResourceView會把Controller處理器方法返回的模型屬性都存放到對應的request屬性中,

      然後通過RequestDispatcher在服務器端把請求forword或重定向到目標URL。比如在InternalResourceViewResolver中定義了prefix=/WEB-INF/,suffix=.jsp,然後請求的Controller處理器方法返回的視圖名稱爲test,

      那麼這個時候InternalResourceViewResolver就會把test解析爲一個InternalResourceView對象,先把返回的模型屬性都存放到對應的HttpServletRequest屬性中,然後利用RequestDispatcher在服務器端把請求forword到/WEB-INF/test.jsp。

這就是InternalResourceViewResolver一個非常重要的特性,我們都知道存放在/WEB-INF/下面的內容是不能直接通過request請求的方式請求到的,爲了安全性考慮,我們通常會把jsp文件放在WEB-INF目錄下,而InternalResourceView在服務器端跳轉的方式可以很好的解決這個問題。

下面是一個InternalResourceViewResolver的定義,根據該定義當返回的邏輯視圖名稱是test的時候,InternalResourceViewResolver會給它加上定義好的前綴和後綴,組成“/WEB-INF/test.jsp”的形式,然後把它當做一個InternalResourceView的url新建一個InternalResourceView對象返回。

2.內置對象(SpringMVC框架內部對象)

 2.1 HandlerMapping(處理器映射器)

      2.1.1 SimpleUrlHandlerMapping對象:主要用來匹配靜態請求(url)

      2.1.2 RequestMappingHandlerMapping對象:主要用來匹配註解請求(url)

 2.2 HandlerAdapter類型(處理器適配器)

      2.2.1 HttpRequestHandlerAdapter匹配ResourceHttpRequestHandler對象,處理靜態資源請求;

      2.2.2 RequestMappingHandlerAdapter匹配具體的Handler對象,處理註解請求

HandlerMapping:請求到處理器的映射,如果映射成功返回一個HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個HandlerInterceptor攔截器)對象;如BeanNameUrlHandlerMapping將URL與Bean名字映射,映射成功的Bean就是此處的處理器;

HandlerAdapter:HandlerAdapter將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持很多類型的處理器;如SimpleControllerHandlerAdapter將對實現了Controller接口的Bean進行適配,並且調處理器的handleRequest方法進行功能處理

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章