1.前端控制器(DispatcherServlet)
spring mvc也是依賴servlet,所以spring mvc的請求處理是從一個servlet開始,這個servlet就是DispatcherServlet。
前端控制器不處理請求,只做中轉,它相當於一箇中轉站,所有的訪問都會走到這個Servlet中,再根據配置進行中轉到相應的Handler中進行處理,獲取到數據和視圖後,在使用相應視圖做出響應。
如下圖前端控制器在web.xml中配置:
2.處理器映射器(HandlerMapping)
本質上就是一段映射關係,將訪問路徑和對應的Handler存儲爲映射關係,在需要時供前端控制器查閱。
可以理解爲一張映射表。
2.1.繼承結構圖如下
2.2HandlerMapping接口功能
HandlerMapping接口中只定義了一個方法
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
該方法很簡單,就是根據請求的request,獲取HandlerExecutionChain對象。
2.3HandlerMapping家族成員
從HandlerMapping接口繼承結構體系圖中,我們可以發現HandlerMapping家族可以分爲兩支,一支繼承AbstractUrlHandlerMapping,一支繼承AbstractHandlerMethodMapping,這兩支都繼承自AbstractHandlerMapping。其中AbstractUrlHandlerMapping在目前大部分的項目使用中,已經很少使用到,AbstractHandlerMethodMapping,他就是我們經常使用的@RequestMapping
註解會使用到的方式。
3.處理器適配器(HandlerAdapter)
本質上是一個適配器,可以根據要求找到對應的Handler來運行。前端控制器通過處理器映射器找到對應的Handler信息之後,將請求響應和對應的Handler信息交由處理器適配器處理,處理器適配器找到真正handler執行後,將結果即model和view返回給前端控制器,具體可以查閱https://blog.csdn.net/qq_32224047/article/details/107113357
使用 <mvc:annotation-driven/> 標籤來配置,它是一種簡寫模式,它會自動註冊處理器適配器,配置方式如下:
4.視圖解析器(ViewResolver)
本質上也是一種映射關係,可以將視圖名稱映射到真正的視圖地址。前端控制器調用處理器適配完成後得到model和view,將view信息傳給視圖解析器得到真正的view
5.視圖(View)
本質上就是將handler處理器中返回的model數據嵌入到視圖解析器解析後得到的jsp頁面中,向客戶端做出響應
6.詳細過程圖解
7. 整體流程圖
HandlerAdapter是框架自動處理
返回model&view只是一串數據---需要視圖解析器去解析---找到view後,將model中的數據填充到view中,然後在前端展示
參考文章:
https://www.jianshu.com/p/a36e1bc4116d