每天資訊Spring 原始碼解析 | Spring MVC 實戰

菜單

Spring 原始碼解析 | Spring MVC 實戰

Spring MVC 說 Spring 框架的一部分,也可以說是 Spring 的一個模組。本文依據 Spring 6。x 進行展開講解,本文使用的原始碼,在參考資料中可以下載。

請求流程

首先我們先來回顧一下 Spring MVC 的請求流程,具體的流程如下圖所示

Spring 原始碼解析 | Spring MVC 實戰

DispatcherServlet:前端排程器,將前端請求攔截下來分發到各控制器方法中 。

HandlerMapping: 負責根據請求的 URL 和 @RequestMapping 對映進行匹配, 匹配到會返回Handler(本質就是具體控制器的方法)。

HandlerAdaper: 負責呼叫Handler具體的方法然後返回檢視的名字 Handler將它封 ModelAndView( 封裝成檢視名,request 域 資料)

ViewReslover: 根據 ModelAndView 裡面的檢視名地址去找到具體的jsp封裝在View物件中;

View:進行檢視渲染(將jsp轉換成html內容 ——這是Servlet容器的事情) 最終response 到的客戶端。

核心檔案

Spring MVC 核心類檔案

DispatcherServlet

HadlerMapping

RequestMappingHandlerAdapter

DispatcherServlet

DispatcherServlet 是 Spring MVC 的核心類,它的本質是一個 Servlet 。經過 WEB 容器,比如:Tomcat 等。會呼叫 方法,後面經過一段邏輯之後,主要是將核心邏輯交給了 進行處處理的步驟如下

Spring 原始碼解析 | Spring MVC 實戰

HadlerMapping

HandlerMapping 主要是用來處理請求的,將咱們的 @RequestMapping 註解上配置的地址,請求方式,以及其他限制定位到具體的一個處理器上。具體處理流程如下:(注:圖片來源於網路)

Spring 原始碼解析 | Spring MVC 實戰

RequestMappingHandlerAdapter

RequestMappingHandlerAdapter 實現了 HandlerAdapter 介面,顧名思義,表示 handler 的 adapter,這裡的 handler 指的是 Spring 處理具體請求的某個Controller的方法,也就是說HandlerAdapter指的是將當前請求適配到某個 Handler的處理器 。RequestMappingHandlerAdapter 是 HandlerAdapter 的一個具體實現,主要用於將某個請求適配給 @RequestMapping 型別的 Handler 處理。

HandlerAdapter 的介面定義如下:

使用過程

匯入依賴

邏輯程式碼

地址請求

請求地址:

http://ip:port/summer/requestTest

程式碼請求過程

Spring MVC 總結

Spring MVC 是一個優秀的 MVC 框架,它是 Spring 框架的一部分。

我們專案透過 Spring MVC 元件的整合和使用,可以提高我們的開發效率。讓開發者可以更加專注與業務本身的開發。

參考資料

gitee。com/zhengsh/spr…

www。cnblogs。com/dragonfei/p…