HandlerMapping、Handler和HandlerAdapter的介紹

Nevermoretoo發表於2018-11-17

HandlerMapping、Handler和HandlerAdapter的介紹

HandlerMapping、Handler和HandlerAdapter這三個概念的理解對學習springmvc十分重要,如果對這三個概念理解的不夠透徹,將會嚴重影響springmvc的理解。

一、Handler

Handler,也就是處理器,它直接對應著MVC中的C層,即Controller層,它可以表現為多種形式,可以是類,也可以是方法或者是其他的形式,它的型別是Object。我們用的最多的就是用@RequestMapping註解標註的方法,它就對應著一個Handler。

二、HandlerMapping

HandlerMapping,是用來查詢Handler的,在spingmvc中會處理很多請求,每一個請求都需要一個Handler進行處理,具體接受到一個請求後使用哪個Handler來處理,就是HandlerMapping需要做的事情

三、HandlerAdapter

HandlerAdapter,即Handler的介面卡,也是這3個概念中理解起來比較模糊的一個概念。上面說Handler的時候,我們說Handler是有多種的表現形式,只要能處理請求就可以,而dispatchServlet處理請求的方式卻是固定的——doService(request,response),那麼怎麼讓固定的doService呼叫靈活的Handler來進行處理呢,這就是HandlerAdapter需要做的事情。

——————————————————————————————分割線——————————————————————————

springmvc處理請求的通俗解釋就是:Handler是用來幹活的工具,HandlerMapping是根據要乾的活找到相應的工具的東西,HandlerAdapter是用工具幹活的人。比如,Handler是挖掘機、壓路機等,那麼HandlerMapping就是根據需要乾的活選擇是用挖掘機還是壓路機幹活的東西,HandlerAdapter就是司機,不同的車需要不同的司機去使用,拆房子就需要挖掘機的司機去使用挖掘機拆,壓路就需要壓路機的司機用壓路機去壓,如果讓壓路機的司機去使用挖掘機拆房,就會出現問題。所以不同的Handler需要不同的HandlerAdapter去使用。在現實中,人的靈活性跟複雜性是最高的,同時也是問題跟困難最多的,同樣的,HandlerAdapter也是springmvc九大元件中最複雜的。

其實,springmvc中的view和viewResolver跟handler和HandlerAdapter的關係是一樣的,view是用來展示資料的,viewResolver是用來查詢view的,就像幹完活需要寫報告,寫報告又需要模板(不同的報告需要不同的模板,比如請假報告或者調查報告),這裡的模板就對應著view,內容就是Handler處理的資料,viewResolver就是用來選擇使用哪個模板的東西。

我這裡只是對這3個概念做一下通俗的介紹,如果需要詳細瞭解其中的原理,還得通過檢視原始碼來學習。

相關文章