SpringMVC執行的過程及前端控制器DispatcherServlet處理器映射器HandlerMapping等詳解

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



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章