Spring 源碼解析 | Spring MVC 實戰(zhàn)
Spring MVC 說 Spring 框架的一部分,也可以說是 Spring 的一個模塊。本文依據 Spring 6.x 進行展開講解,本文使用的源碼,在參考資料中可以下載。
請求流程
首先我們先來回顧一下 Spring MVC 的請求流程,具體的流程如下圖所示
DispatcherServlet:前端調度器,將前端請求攔截下來分發(fā)到各控制器方法中 。
HandlerMapping: 負責根據請求的 URL 和 @RequestMapping 映射進行匹配, 匹配到會返回Handler(本質就是具體控制器的方法)。
HandlerAdaper: 負責調用Handler具體的方法然后返回視圖的名字 Handler將它封 ModelAndView( 封裝成視圖名,request 域 數(shù)據)
ViewReslover: 根據 ModelAndView 里面的視圖名地址去找到具體的jsp封裝在View對象中;
View:進行視圖渲染(將jsp轉換成html內容 --這是Servlet容器的事情) 最終response 到的客戶端。
核心文件
Spring MVC 核心類文件
DispatcherServlet
HadlerMapping
RequestMappingHandlerAdapter
DispatcherServlet
DispatcherServlet 是 Spring MVC 的核心類,它的本質是一個 Servlet 。經過 WEB 容器,比如:Tomcat 等。會調用 doService 方法,后面經過一段邏輯之后,主要是將核心邏輯交給了 DispatcherServlet#doDispatch 進行處處理的步驟如下
HadlerMapping
HandlerMapping 主要是用來處理請求的,將咱們的 @RequestMapping 注解上配置的地址,請求方式,以及其他限制定位到具體的一個處理器上。具體處理流程如下:(注:圖片來源于網絡)
RequestMappingHandlerAdapter
RequestMappingHandlerAdapter 實現(xiàn)了 HandlerAdapter 接口,顧名思義,表示 handler 的 adapter,這里的 handler 指的是 Spring 處理具體請求的某個Controller的方法,也就是說HandlerAdapter指的是將當前請求適配到某個 Handler的處理器 。RequestMappingHandlerAdapter 是 HandlerAdapter 的一個具體實現(xiàn),主要用于將某個請求適配給 @RequestMapping 類型的 Handler 處理。
HandlerAdapter 的接口定義如下:
public interface HandlerAdapter {
// 用于判斷當前HandlerAdapter是否能夠處理當前請求
boolean supports(Object handler);
// 如果當前HandlerAdapter能夠用于適配當前請求,那么就會處理當前請求中
// 諸如參數(shù)和返回值等信息,以便能夠直接委托給具體的Handler處理
ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception;
// 獲取當前請求的最后更改時間,主要用于供給瀏覽器判斷當前請求是否修改過,
// 從而判斷是否可以直接使用之前緩存的結果
long getLastModified(HttpServletRequest request, Object handler);
}
復制代碼使用過程
導入依賴
implementation project(":spring-webmvc")
復制代碼邏輯代碼
@RestController
@RequestMapping("/summer")
public class SummerController {
@RequestMapping("/requestTest")
public CommonResult requestTest(@RequestBody SummerModel summerModel) {
SummerVo summerVo = new SummerVo();
BeanUtils.copyProperties(summerModel, summerVo);
return CommonResult.success(summerVo);
}
}
復制代碼地址請求
請求地址:
http://ip:port/summer/requestTest
代碼請求過程
Spring MVC 總結
Spring MVC 是一個優(yōu)秀的 MVC 框架,它是 Spring 框架的一部分。
我們項目通過 Spring MVC 組件的集成和使用,可以提高我們的開發(fā)效率。讓開發(fā)者可以更加專注與業(yè)務本身的開發(fā)。
參考資料
gitee.com/zhengsh/spr…
www.cnblogs.com/dragonfei/p…
作者:老鄭_
鏈接:https://juejin.cn/post/7019689141700919333
來源:稀土掘金
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。
