SpringMVC
SpringMVC這麼火,要不我們手撕一下吧~
_(¦3」∠)_
手撕是深層理解框架的必經之路。最近就手撕了一個比較具體而微型的SpringMVC核心功能(只是實現了接受請求時調用的邏輯)。發出來給大家分享分享~
瞭解SpringMVC
SpringMVC接受用戶請求時的調用邏輯順序如下:
步驟解讀:
- 用戶發送請求到前端控制器DispatcherServlet
- DispatcherServlet收到請求時調用HandlerMapping 處理器映射器
- HandlerMapping 找到具體的處理器,生成處理器對象和處理器攔截器(如果存在攔截器的話)一併返回給DispatcherServlet
- DispatcherServlet 調用具體的HandlerAdapter處理器適配器
- HandlerAdapter 經過適配調用具體的處理器 (Controller,也叫後端控制器)
- Controller 執行完成返回 ModelAndView
- HandlerAdapter 將controller執行結果ModelAndView返回給DispatcherServlet
- DispatcherServlet 將 ModelAndView 傳給 ViewReslover 視圖解析器
- ViewReslover 返回 View
- DispatcherServlet 根據View進行渲染視圖(即將模型數據填充至視圖中)
- DispatcherServlet 響應用戶
手撕簡單的SpringMVC
我已將SpringMVC的代碼放到GitHub,源碼中有比較詳細的註解,另外爲了方便大家理解,其中不乏一些重複的代碼沒有提取出來(特別是在DispatcherServlet),大家自己可以試着優化優化。
開發環境:Idea 2018.3
我的SpringMVC:LPB-Devin/MySpringMVC
老鐵滿意的話,可以幫Star下哇~