如何解讀 Spring MVC 的執行流程及原理?

傳智教育官方賬號 發佈 2022-12-28T20:17:36.693715+00:00

一、SpringMVC概述學習SpringMVC我們先來回顧下現在web程序是如何做的,咱們現在web程序大都基於三層架構來實現。

一、SpringMVC概述

學習SpringMVC我們先來回顧下現在web程序是如何做的,咱們現在web程序大都基於三層架構來實現。

三層架構:

瀏覽器發送一個請求給後端伺服器,後端伺服器現在是使用servlet來接收請求和數據

如果所有的處理都交給Servlet來處理的話,所有的東西都耦合在一起,對後期的維護和擴展極為不利

將後端伺服器Servlet拆分成三層,分別是web、service和dao

  • web層主要由servlet來處理,負責頁面請求和數據的收集以及響應結果給前端
  • service層主要負責業務邏輯的處理
  • dao層主要負責數據的增刪改查操作

servlet處理請求和數據的時候,存在的問題是一個servlet只能處理一個請求

針對web層進行了優化,採用了MVC設計模式,將其設計為controller、view和Model

  • controller負責請求和數據的接收,接收後將其轉發給service進行業務處理
  • service根據需要會調用dao對數據進行增刪改查
  • dao把數據處理完後將結果交給service,service再交給controller
  • controller根據需求組裝成Model和View,Model和View組合起來生成頁面轉發給前端瀏覽器
  • 這樣做的好處就是controller可以處理多個請求,並對請求進行分發,執行不同的業務操作。

隨著網際網路的發展,上面的模式因為是同步調用,性能慢慢的跟不上需求,所以異步調用慢慢的走到了前台,是現在比較流行的一種處理方式。

因為是異步調用,所以後端不需要返回view視圖,將其去除

前端如果通過異步調用的方式進行交互,後台就需要將返回的數據轉換成json格式進行返回

SpringMVC主要負責的就是

  • controller如何接收請求和數據
  • 如何將請求和數據轉發給業務層
  • 如何將響應數據轉換成json發回到前端

介紹了這麼多,對SpringMVC進行一個定義

SpringMVC是一種基於Java實現MVC模型的輕量級Web框架

優點

  • 使用簡單、開發便捷(相比於Servlet)
  • 靈活性強
  • 這裡所說的優點,就需要我們在使用的過程中慢慢體會。

二、工作流程解析

為了更好的使用SpringMVC,我們將SpringMVC的使用過程總共分兩個階段來分析,分別是啟動伺服器初始化過程和單次請求過程

2.1 啟動伺服器初始化過程

1. 伺服器啟動,執行ServletContainersInitConfig類,初始化web容器功能類似於以前的web.xml

2. 執行createServletApplicationContext方法,創建了WebApplicationContext對象該方法加載SpringMVC的配置類SpringMvcConfig來初始化SpringMVC的容器

3. 加載SpringMvcConfig配置類

4. 執行@ComponentScan加載對應的bean掃描指定包及其子包下所有類上的註解,如Controller類上的@Controller註解

5. 加載UserController,每個@RequestMapping的名稱對應一個具體的方法

此時就建立了 /save 和 save方法的對應關係

6.執行getServletMappings方法,設定SpringMVC攔截請求的路徑規則

/代表所攔截請求的路徑規則,只有被攔截後才能交給SpringMVC來處理請求

2.2 單次請求過程

  • 1. 發送請求http://localhost/save
  • 2. web容器發現該請求滿足SpringMVC攔截規則,將請求交給SpringMVC處理
  • 3. 解析請求路徑/save
  • 4. 由/save匹配執行對應的方法save()上面的第五步已經將請求路徑和方法建立了對應關係,通過/save就能找到對應的save方法
  • 5. 執行save()
  • 6. 檢測到有@ResponseBody直接將save()方法的返回值作為響應體返回給請求方
關鍵字: