<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring 源碼解析 | Spring MVC 實戰(zhàn)

          共 2401字,需瀏覽 5分鐘

           ·

          2021-10-20 19:19

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

          請求流程

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

          1. DispatcherServlet:前端調度器,將前端請求攔截下來分發(fā)到各控制器方法中 。

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

          3. HandlerAdaper: 負責調用Handler具體的方法然后返回視圖的名字 Handler將它封 ModelAndView( 封裝成視圖名,request 域 數(shù)據)

          4. ViewReslover: 根據 ModelAndView 里面的視圖名地址去找到具體的jsp封裝在View對象中;

          5. 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 總結

          1. Spring MVC 是一個優(yōu)秀的 MVC 框架,它是 Spring 框架的一部分。

          2. 我們項目通過 Spring MVC 組件的集成和使用,可以提高我們的開發(fā)效率。讓開發(fā)者可以更加專注與業(yè)務本身的開發(fā)。

          參考資料

          • gitee.com/zhengsh/spr…

          • www.cnblogs.com/dragonfei/p…


          作者:老鄭_
          鏈接:https://juejin.cn/post/7019689141700919333
          來源:稀土掘金
          著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。



          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  家庭乱伦无码 | 操操操操操逼 | 极品在线试看 | 人人摸人人撸 | 奶妈做爱网站 |