HandlerMapping、Handler和HandlerAdapter的介紹
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個概念做一下通俗的介紹,如果需要詳細瞭解其中的原理,還得通過檢視原始碼來學習。
相關文章
- LayerMask 的介紹和使用
- XML和JSON的介紹XMLJSON
- HTTPS 和HTTP的介紹HTTP
- BlockingQueue 的介紹和使用BloC
- [ChatGPT 勘誤]SAP ABAP 裡 CL_WB_ED_ENHANCEMENT_HANDLER 的用途介紹ChatGPT
- Sqoop的介紹和安裝OOP
- web worker的介紹和使用Web
- HTTP介紹和HTML簡介HTTPHTML
- Lombok介紹和配置Lombok
- Redis介紹和使用Redis
- The Graph介紹和使用
- PKI和CA 介紹
- 介紹 Go 的陣列和切片Go陣列
- clang-format的介紹和使用ORM
- Web Storage API的介紹和使用WebAPI
- 精盡Spring MVC原始碼分析 - HandlerAdapter 元件(一)之 HandlerAdapterSpringMVC原始碼APT元件
- ddddocr基本使用和介紹
- Python JWT 介紹和使用PythonJWT
- iOS Runtime介紹和使用iOS
- MySQL MRR和ICP介紹MySql
- Tensorflow介紹和安裝
- AirPods介紹|AirPods Pro 的空間音訊功能介紹和開啟教程AI音訊
- langchain中的chat models介紹和使用LangChain
- K8s的介紹和特性K8S
- Bagging和Boosting的介紹及對比
- Webpack的基本配置和打包與介紹Web
- FTP和TFTP的區別與介紹FTP
- Google guava工具類的介紹和使用GoGuava
- 介紹 Linux 中的管道和命名管道Linux
- babel-runtime和babel-polyfill的介紹和使用Babel
- 詳細介紹php和apache的關係和作用PHPApache
- Spring Reactor基本介紹和案例SpringReact
- 【Linux】jq 命令介紹和使用Linux
- 容器技術和Docker介紹Docker
- Linux Boot,Kernel 和 Service 介紹Linuxboot
- LVFS專案公告和介紹
- Charles 功能介紹和使用教程
- canvas描邊和填充介紹Canvas