SpringMVC中執行流程

文章目錄

    • 14、SpringMVC執行流程
      • 14.1、SpringMVC常用組件
      • 14.2、DispatcherServlet初始化過程
        • ①初始化WebApplicationContext
        • ②創建WebApplicationContext
        • ③DispatcherServlet初始化策略
      • 14.3、DispatcherServlet調用組件處理請求
        • ①processRequest()
        • ②doService()
        • ③doDispatch()
        • ④processDispatchResult()
      • 14.4、SpringMVC的執行流程
        • 用戶向服務器發送請求,請求被SpringMVC 前端控制器 DispatcherServlet捕獲。
        • DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI),判斷請求URI對應的映射:
          • 不存在
          • 存在則執行下面的流程

14、SpringMVC執行流程

14.1、SpringMVC常用組件

  1. DispatcherServlet:前端控制器,不需要工程師開發,由框架提供

作用:統一處理請求和響應,整個流程控制的中心,由它調用其它組件處理用戶的請求

  1. HandlerMapping:處理器映射器,不需要工程師開發,由框架提供

作用:根據請求的url、method等信息查找Handler,即控制器方法

  1. Handler:處理器,需要工程師開發

作用:在DispatcherServlet的控制下Handler對具體的用戶請求進行處理

  1. HandlerAdapter:處理器適配器,不需要工程師開發,由框架提供

作用:通過HandlerAdapter對處理器(控制器方法)進行執行

  1. ViewResolver:視圖解析器,不需要工程師開發,由框架提供

作用:進行視圖解析,得到相應的視圖,例如:ThymeleafView、InternalResourceView、

RedirectView

  1. View:視圖

作用:將模型數據通過頁面展示給用戶

14.2、DispatcherServlet初始化過程

DispatcherServlet 本質上是一個 Servlet,所以天然的遵循 Servlet 的生命周期。所以宏觀上是 Servlet生命周期來進行調度。

①初始化WebApplicationContext
②創建WebApplicationContext

所在類:org.springframework.web.servlet.FrameworkServlet

③DispatcherServlet初始化策略

FrameworkServlet創建WebApplicationContext后,刷新容器,調用onRefresh(wac),此方法在DispatcherServlet中進行了重寫,調用了initStrategies(context)方法,初始化策略,即初始化DispatcherServlet的各個組件

所在類:org.springframework.web.servlet.DispatcherServlet

14.3、DispatcherServlet調用組件處理請求

①processRequest()

FrameworkServlet重寫HttpServlet中的service()和doXxx(),這些方法中調用了

processRequest(request, response)

所在類:org.springframework.web.servlet.FrameworkServlet

②doService()

所在類:org.springframework.web.servlet.DispatcherServlet

③doDispatch()

所在類:org.springframework.web.servlet.DispatcherServlet

④processDispatchResult()

14.4、SpringMVC的執行流程

  1. 用戶向服務器發送請求,請求被SpringMVC 前端控制器 DispatcherServlet捕獲。
  2. DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI),判斷請求URI對應的映射:
    • 不存在
      1. 再判斷是否配置了mvc:default-servlet-handler
      2. 如果沒配置,則控制臺報映射查找不到,客戶端展示404錯誤
      3. 如果有配置,則訪問目標資源(一般為靜態資源,如:JS,CSS,HTML),找不到客戶端也會展示404錯誤
    • 存在則執行下面的流程
      1. 根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象(包括Handler對象以及Handler對象對應的攔截器),最后以HandlerExecutionChain執行鏈對象的形式返回。
      2. DispatcherServlet 根據獲得的Handler,選擇一個合適的HandlerAdapter
      3. 如果成功獲得HandlerAdapter,此時將開始執行攔截器的preHandler(…)方法【正向】
      4. 提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)方法,處理請求。在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作:
        • 數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等
        • 數據格式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期等
        • 數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中
      5. Handler執行完成后,向DispatcherServlet 返回一個ModelAndView對象。
      6. 此時將開始執行攔截器的postHandle(…)方法【逆向】。
      7. 根據返回的ModelAndView(此時會判斷是否存在異常:如果存在異常,則執行 HandlerExceptionResolver進行異常處理)選擇一個適合的ViewResolver進行視圖解析,根據Model 和View,來渲染視圖。
      8. 渲染視圖完畢執行攔截器的afterCompletion(…)方法【逆向】。
        擇一個適合的ViewResolver進行視圖解析,根據Model 和View,來渲染視圖。
      9. 渲染視圖完畢執行攔截器的afterCompletion(…)方法【逆向】。
      10. 將渲染結果返回給客戶端。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37991.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Zynq7000系列FPGA中DMA引擎編程指南

DMA引擎的編程指南通常涉及一系列步驟和API調用,以確保數據在內存之間的高效傳輸,而無需CPU的直接干預。 DMA引擎的編程指南包括以下部分: 一、編寫微代碼為AXI事務編寫CCRx程序 通道微碼用于設置dmac.CCRx寄存器以定義AXI事務的屬性。這是…

TikTok直播限流與網絡的關系及解決方法

TikTok作為一款熱門的社交平臺,其直播功能吸引了大量用戶。然而,一些用戶可能會遇到TikTok直播限流的問題,例如直播過程中出現播放量低、直播畫面質量差等情況。那么,TikTok直播限流與所使用的網絡線路是否有關系?是否…

學習springIOC

第二章 Spring IOC 章節內容 Spring IOC技術實現Spring IOC設值注入Spring IOC構造注入 章節目標 掌握Spring IOC技術實現掌握Spring IOC設置注入掌握Spring IOC構造注入 第一節 Spring簡介 1. Spring 簡介 Spring 是目前主流的 Java 開發框架,是 Java 世界最…

Android實現手寫輸入

android應用開發中有時會有手寫輸入需求,非通過系統鍵盤手寫功能,比如自定義鍵盤,這時就需要自己來實現,一般有兩種場景:一種是類似手寫簽名保存;另一種是真正的手寫輸入,需要將筆跡識別成正確的…

JTracker IDEA 中最好的 MyBatis 日志格式化插件

前言 如果你使用 MyBatis ORM 框架,那么你應該用過 MyBatis Log 格式化插件,它可以讓我們的程序輸出的日志更人性化。 但是有一個問題,通常我們只能看到格式化后的效果,沒辦法知道這個 SQL 是誰執行的以及調用的鏈路。 如下圖所…

文章解讀與仿真程序復現思路——電網技術EI\CSCD\北大核心《考慮復合指標優化模態分解和 Stacking 集成的綜合能源系統多元負荷預測》

本專欄欄目提供文章與程序復現思路,具體已有的論文與論文源程序可翻閱本博主免費的專欄欄目《論文與完整程序》 論文與完整源程序_電網論文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 電網論文源程序-CSDN博客電網論文源…

【stm32】大一上學期筆記復制

砌墻單片機 外設是什么? ipage 8 nx軸 128 X0-127 y0-63 PWM脈沖寬度調制 PWM脈沖寬度調制 2023年10月13日 基本特性:脈沖寬度調制PWM是一種對模擬信號進行數字編碼的方法。廣泛引用于電機控制,燈光的亮度調節,功率控制等領域…

趕緊收藏!全網最佳WebSocket封裝:完美支持斷網重連,自動心跳!

文章目錄 一、WebSocket封裝庫簡介二、庫的安裝與配置2.1 安裝2.2 初始化 三、功能詳解3.1 斷網重連3.2 自動心跳3.3 消息隊列3.4 事件管理 四、示例代碼五、總結 🎉歡迎來到Java學習路線專欄~探索Java中的靜態變量與實例變量 ☆* o(≧▽≦)o *☆嗨~我是IT陳寒&…

Windows Server 2019部署網絡負載均衡NLB服務的詳細操作步驟

部署前準備 首先需要準備兩臺Windows Server 2019服務器,虛擬機創建請參考 VMware Workstation安裝Windows Server2019系統詳細操作步驟_安裝windows server 2019操作系統(寫出操作過程)-CSDN博客 克隆虛擬機請參考 VMware Workstation克隆虛擬機詳細步驟-CSDN博…

超詳細的 C++中的封裝繼承和多態的知識總結<2.多態>

引言 小伙伴們我們都知道了,什么是封裝和繼承,在有了這個的基礎上我們接著來看什么是多態。多態從字面上意思我們就可以知道,大概就是一個函數的不同形態,而且,前邊我們在學習函數重載的時候我們已經簡單的了解了如何用…

[Swiper]在React中使用Swiper時注意銷毀實例

swiper版本號: {"swiper": "^4.4.2", }在useEffect中初始化swiper實例,由于依賴項的變更,可能會重復初始化: useEffect(() > {swiper.current new Swiper(#mainSwiper, {autoplay: {delay: 3000,//3秒切換一次},on…

Android 休眠流程(三)

Android 休眠流程(三) 上一篇《Android 休眠流程(二)》簡單講解內核階段進入休眠流程,本篇繼續深挖,簡單講解休眠進入ATF。ATF(ARM Trusted Firmware) 的體系架構里將整個系統分成四種安全等級,分別為:EL0、EL1、EL2、EL3。將整個安全啟動的流程階段定義為:BL1、BL2…

相等運算符==與 === 的區別

相等運算符用來比較兩個值是否相等 1、運算符 如果相等會返回true,否則返回false使用 來做相等運算當使用來比較兩個值時,如果值的類型不同,則會自動進行類型轉換,將其轉換為相同的類型比較 console.log("1" 1); //true console.…

機器學習算法 —— 基于penguins_raw數據集的決策樹

??歡迎來到 我的博客 —— 探索技術的無限可能! ??博客的簡介(文章目錄) 目錄 實戰演示基于penguins_raw數據集的決策樹實戰導入模塊數據信息簡單查看可視化描述利用 決策樹模型 在二分類上 進行訓練和預測利用 決策樹模型 在三分類(多分類)上 進行訓練和預測實戰 演示…

OCI對象存儲數據轉移到另一個桶

// 舊桶 String bucketName_old “Bucket-old”; // 新桶 String bucketName_new “Bucket-new”; // 圖片前綴 String filePrefix “obj-filePrefix/”; AmazonS3 instance AmazonS3ClientFactory.getS3Instance(); String continuationToken null; int num 0; try { do…

推薦算法學習筆記2.1:基于深度學習的推薦算法-基于共線矩陣的深度推薦算法-AutoRec模型

AutoRec模型 前置知識:推薦算法學習筆記1.1:傳統推薦算法-協同過濾算法 AutoRec模型通過引入自編碼器結構,將共線矩陣中的用戶向量(基于用戶的U-AutoRec)或物品向量(基于物品的I-AutoRec)嵌入到低維空間后還…

訊方技術鴻蒙應用定制開發服務上架華為云商店

在當前智能化與互聯互通發展的時代背景下,鴻蒙操作系統已成為推動創新應用發展的新引擎。隨著企業對個性化智能解決方案需求的不斷增長,鴻蒙應用定制開發已成為企業技術轉型升級的重要途徑。 訊方技術作為一家致力于為客戶提供全面專業服務的企業&#…

LVM核心概念

1. LVM簡介 LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。 優點: 可以靈活分配…

Java中如何實現一個線程安全的HashMap?

在Java中,實現一個線程安全的HashMap可以通過使用java.util.concurrent.ConcurrentHashMap類來實現。ConcurrentHashMap類是Java并發包java.util.concurrent的一部分,它提供了一種線程安全的哈希表實現。 以下是如何使用ConcurrentHashMap實現線程安全的…

2024年,精品課錄制新方式,站在大屏前錄出綠幕摳像的效果!感謝不坑盒子!

先做個小調查:你們那邊請工作室錄一節課,多少錢?留言區交流一下。 暑假了,老師們又有時間來錄課了。 早在2021年秋天,精品課遴選的第一年,我就第一時間給大家分享了2種錄精品課的方法:大屏前錄…