1. 程式人生 > >【SpringMVC】9大元件概覽

【SpringMVC】9大元件概覽

    SpringMVC中的Servlet一共有三個層次,分別是HttpServletBean、FrameworkServlet和 DispatcherServlet。

    HttpServletBean直接繼承自java的HttpServlet,其作用是將Servlet中配置的引數設定到相應的屬性;

    FrameworkServlet初始化了WebApplicationContext,DispatcherServlet初始化了自身的9個元件。本篇部落格的內容就是對9個元件做個概覽。

    在學習9個元件之前,我們需要先了解Handler的概念,也就是處理器。它直接應對著MVC中的C也就是Controller層,它的具體表現形式有很多,可以是類,也可以是方法。在Controller層中@RequestMapping標註的所有方法都可以看成是一個Handler,只要可以實際處理請求就可以是Handler。

    Handler的概念清楚了,下面開始對9個元件一一介紹。

【1. HandlerMapping】

    是用來查詢Handler的。在SpringMVC中會有很多請求,每個請求都需要一個Handler處理,具體接收到一個請求之後使用哪個Handler進行處理呢?這就是HandlerMapping需要做的事。

【2. HandlerAdapter】

    從名字上看,它就是一個介面卡。因為SpringMVC中的Handler可以是任意的形式,只要能處理請求就ok,但是Servlet需要的處理方法的結構卻是固定的,都是以request和response為引數的方法。如何讓固定的Servlet處理方法呼叫靈活的Handler來進行處理呢?這就是HandlerAdapter要做的事情。

    小結:Handler是用來幹活的工具;HandlerMapping用於根據需要乾的活找到相應的工具;HandlerAdapter是使用工具幹活的人。

【3. HandlerExceptionResolver】

    其它元件都是用來幹活的。在幹活的過程中難免會出現問題,出問題後怎麼辦呢?這就需要有一個專門的角色對異常情況進行處理,在SpringMVC中就是HandlerExceptionResolver。具體來說,此元件的作用是根據異常設定ModelAndView,之後再交給render方法進行渲染。

【4. ViewResolver】

    ViewResolver用來將String型別的檢視名和Locale解析為View型別的檢視。View是用來渲染頁面的,也就是將程式返回的引數填入模板裡,生成html(也可能是其它型別)檔案。這裡就有兩個關鍵問題:使用哪個模板?用什麼技術(規則)填入引數?這其實是ViewResolver主要要做的工作,ViewResolver需要找到渲染所用的模板和所用的技術(也就是檢視的型別)進行渲染,具體的渲染過程則交由不同的檢視自己完成。

【5. RequestToViewNameTranslator】

    ViewName是根據ViewName查詢View,但有的Handler處理完後並沒有設定View也沒有設定ViewName,這時就需要從request獲取ViewName了,如何從request中獲取ViewName就是RequestToViewNameTranslator要做的事情了。RequestToViewNameTranslator在Spring MVC容器裡只可以配置一個,所以所有request到ViewName的轉換規則都要在一個Translator裡面全部實現。

【6. LocaleResolver】

    解析檢視需要兩個引數:一是檢視名,另一個是Locale。檢視名是處理器返回的,Locale是從哪裡來的?這就是LocaleResolver要做的事情。LocaleResolver用於從request解析出Locale,Locale就是zh-cn之類,表示一個區域,有了這個就可以對不同區域的使用者顯示不同的結果。SpringMVC主要有兩個地方用到了Locale:一是ViewResolver檢視解析的時候;二是用到國際化資源或者主題的時候。

【7. ThemeResolver】

    用於解析主題。SpringMVC中一個主題對應一個properties檔案,裡面存放著跟當前主題相關的所有資源、如圖片、css樣式等。SpringMVC的主題也支援國際化,同一個主題不同區域也可以顯示不同的風格。SpringMVC中跟主題相關的類有 ThemeResolver、ThemeSource和Theme。主題是通過一系列資源來具體體現的,要得到一個主題的資源,首先要得到資源的名稱,這是ThemeResolver的工作。然後通過主題名稱找到對應的主題(可以理解為一個配置)檔案,這是ThemeSource的工作。最後從主題中獲取資源就可以了。

【8. MultipartResolver】

    用於處理上傳請求。處理方法是將普通的request包裝成MultipartHttpServletRequest,後者可以直接呼叫getFile方法獲取File,如果上傳多個檔案,還可以呼叫getFileMap得到FileName->File結構的Map。此元件中一共有三個方法,作用分別是判斷是不是上傳請求,將request包裝成MultipartHttpServletRequest、處理完後清理上傳過程中產生的臨時資源。

【9. FlashMapManager】

    用來管理FlashMap的,FlashMap主要用在redirect中傳遞引數。

【總結】

    至此,SpringMVC中的9大元件也就簡單地概述了一遍。通過對此9大元件的巨集觀認識,對分析SpringMVC的設計、原理與實現都會有很大的幫助作用。