天天看點

springmvc工作流程_一篇文章搞懂SpringMVC核心執行原理

對Java程式員來講,做web開發最熟悉的架構莫過于SpringMVC了。之是以它能一統江湖,不是自己太優秀,而是對手太坑了,不知道大家還記不記得2017年左右Struts2爆出了一個大漏洞,自此之後,Web開發領域的就是SpringMVC的天下了。

但是鑒于這麼優秀的架構,很多程式員還隻是停留在會用的狀态,對底層的原理卻不甚了解,是以今天咱麼就來聊聊SpringMVC的工作原理。

三層架構

在開始介紹SpringMVC之前,咱麼要先來了解一下web開發的曆史。我們的開發架構一般都是基于兩種形式,一種是C/S架構,也就是用戶端/伺服器,另一種是B/S架構,也就是浏覽器/伺服器。而在JavaWeb開發中,幾乎都是采用B/S架構的開發模式,在這種架構模式中,将整個業務應用劃分為三層架構,分别是::表現層(UI)、業務邏輯層(BLL)、資料通路層(DAL),核心的思想就是“高内聚,低耦合”。

springmvc工作流程_一篇文章搞懂SpringMVC核心執行原理
  • 表現層(UI)也就是我們常說的web層,展現給使用者的界面,即使用者在使用一個系統的時候的所見所得。講人話就是我們看到的網頁。
  • 業務邏輯層(BLL)也就是我們常說的 service 層。主要對業務業務邏輯處理。
  • 資料通路層(DAL)也就是我們是常說的DAO 層。就是直接操作資料庫,針對資料的增添、删除、修改、更新、查找等。
springmvc工作流程_一篇文章搞懂SpringMVC核心執行原理

MVC架構模式

MVC全稱是【ModelView Controller】,模型(Model)是-視圖(View)-控制器(Controller)的縮寫,是一種軟體設計模式,是一種架構思想,展現的是責任分離思想,各自做各自最擅長的事情。它是基于表現層把程式分為三大部分:模型、視圖、控制器,每一部分又有其單獨的意含義。

  • 模型(Model ):資料模型,Model是資料模型,其實就是JavaBean對象,細分可以表示為業務元件(service)、領域模型元件(domain)等,Model包含要展示的資料和擁有的業務功能方法。
  • 視圖(View ):資料展示,說人話就是使用者能看到的網頁界面,當然該界面上還需要展示資料模型中的具體資料。
  • 控制器(Controller):接收使用者請求,并分發給對應的模型進行處理處理完畢後把傳回的模型資料傳回給視圖進行渲染,最終展示給使用者。

SpringMVC 的概念

SpringMVC 是一種基于Java 的實作 MVC 設計模型的請求驅動類型的輕量級Web 架構,是Spring 架構提供的建構Web 應用程式的全功能 MVC子產品。目前SpringMVC 已經成為目前最優秀的MVC 架構之一。特别是支援RESTful程式設計風格,更是和微服架構的無縫契合。

springmvc工作流程_一篇文章搞懂SpringMVC核心執行原理

SpringMVC的核心元件

1.DispatcherServlet【前端控制器】

相當于中央處理器,用來分發請求的不同的處理流程,如:分發到HandlerMapping、HandlerAdapter、View resolver等。

2.Controller【處理器】

處理不同類型的業務請求,如:增删改查的業務。

3.HandlerMapping【處理器映射器】

根據使用者請求找到Handler即處理器,SpringMvc提供了不同的映射器實作不同的映射方式,如:配置檔案方式,實作接口方式,注解方式。

4.HandlerAdapter【處理器擴充卡】

通過HandlerAdapter對處理器進行執行,這是擴充卡模式的應用,通過擴充擴充卡可以對更多類型的處理器進行執行。

springmvc工作流程_一篇文章搞懂SpringMVC核心執行原理

5.View resolver【視圖解析器】

進行視圖解析,根據邏輯視圖名解析成真正的視圖View視圖,最終需要通過網頁将資料模型展示給使用者。

執行流程

下面我們來通過一張SpringMVC的流程圖,來看一下它的每個元件都是用來的幹啥的,有什麼作用,明白了這些之後,以後開發的時候就可以很清楚的知道一個請求過來之後,都經過了哪些元件,每一個元件都發揮了什麼樣的作用。

根據這張流程圖,我們再來分别解釋一下每一步以及每一個元件的具體作用。

  1. 使用者發送請求至前端控制器DispatcherServlet,進行分發處理。
  2. DispatcherServlet收到請求調用處理器映射器HandlerMapping。
  3. 處理器映射器根據請求url找到具體的處理器,生成處理器執行鍊HandlerExecutionChain(包括處理器對象和處理器攔截器)一并傳回給DispatcherServlet。
  4. DispatcherServlet根據處理器Handler擷取處理器擴充卡HandlerAdapter執行HandlerAdapter處理一系列的操作,如:參數封裝,資料格式轉換,資料驗證等操作。
  5. 執行處理器Handler(Controller,也叫頁面控制器)。
  6. Handler執行完成傳回ModelAndView。
  7. HandlerAdapter将Handler執行結果ModelAndView傳回到DispatcherServlet。
  8. DispatcherServlet将ModelAndView傳給ViewReslover視圖解析器。
  9. ViewReslover解析後傳回具體View。
  10. DispatcherServlet對View進行渲染視圖(即将模型資料model填充至視圖中)。
  11. 最終DispatcherServlet響應使用者。

通過以上對每個元件的介紹,以及每個元件的作用,和各元件中的調用關系;明白了這些之後,我們使用SpringMVC的時候,在腦子裡就會一張流程圖,知道每一個請求來了之後,都做了哪些動作,如果後期我們想對一些請求進行幹預的話,就可以友善的找到對應的元件,對應的位置來進行幹預。

繼續閱讀