地基簡識Spring MVC 組件

Spring MVC 是一個基于 MVC 設計模式的框架,其核心組件協同工作以處理 HTTP 請求并生成響應。以下是各組件的詳細說明及其協作流程:


一、?核心組件

  1. ?DispatcherServlet(前端控制器)?

    • ?作用:接收所有請求并協調其他組件處理。
    • ?流程:作為中央調度器,將請求分發給合適的處理器,并管理視圖渲染和異常處理。
  2. ?HandlerMapping(處理器映射器)?

    • ?作用:根據請求的 URL 和配置,確定處理請求的 Controller 及其方法。
    • ?示例@RequestMapping?注解將 URL 映射到具體方法。
  3. ?HandlerAdapter(處理器適配器)?

    • ?作用:調用具體的處理器方法,處理參數綁定、數據轉換和返回值處理。
    • ?示例:適配?@Controller?注解的類或?Controller?接口的實現。
  4. ?ViewResolver(視圖解析器)?

    • ?作用:將邏輯視圖名(如?"home")解析為物理視圖(如 JSP、Thymeleaf 模板)。
    • ?配置示例:添加前綴?/WEB-INF/views/?和后綴?.jsp
  5. ?ModelAndView

    • ?作用:封裝模型數據(業務結果)和視圖信息(渲染目標)。
    • ?使用:Controller 方法返回該對象,傳遞數據到視圖層。
  6. ?HandlerExceptionResolver(異常解析器)?

    • ?作用:統一處理請求處理過程中的異常,返回自定義錯誤視圖或狀態碼。
    • ?工具:結合?@ControllerAdvice?實現全局異常處理。
  7. ?MultipartResolver(文件上傳解析器)?

    • ?作用:解析?multipart/form-data?請求,處理文件上傳。
    • ?示例CommonsMultipartResolver?處理文件流。
  8. ?LocaleResolver & ThemeResolver(區域與主題解析器)?

    • ?作用:支持國際化(i18n)和主題切換,根據請求確定用戶區域或主題。
  9. ?參數解析器與消息轉換器

    • ?Parameter Resolvers:處理?@RequestParam@PathVariable?等參數綁定。
    • ?HttpMessageConverter:轉換請求/響應體數據(如 JSON ? Java 對象),支持?@RequestBody?和?@ResponseBody

二、?請求處理流程

  1. ?請求接收

    1. ????????DispatcherServlet 接收 HTTP 請求。

  2. ?處理器匹配?

    1. ????????HandlerMapping 根據 URL 找到對應的 Controller 方法。

  3. ?方法執行?

    1. HandlerAdapter 調用目標方法,處理參數綁定(如解析路徑變量、請求體等),執行業務邏輯。

  4. ?返回處理結果?

    1. 方法返回?ModelAndView?或通過?@ResponseBody?返回數據。若返回視圖名,由 ViewResolver 解析為具體視圖。

  5. ?視圖渲染?

    1. 視圖技術(如 JSP、Thymeleaf)使用模型數據渲染頁面,生成響應內容。

  6. ?異常處理?

    1. 若過程中拋出異常,HandlerExceptionResolver 捕獲并處理,返回錯誤頁面或 JSON 錯誤信息。

  7. ?響應返回?

    1. DispatcherServlet 將最終響應發送給客戶端。


三、?配置示例

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {// 配置視圖解析器@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}// 啟用JSON轉換@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new MappingJackson2HttpMessageConverter());}// 文件上傳支持@Beanpublic MultipartResolver multipartResolver() {return new CommonsMultipartResolver();}
}

四、?總結

????????Spring MVC 的組件化設計實現了職責分離,提升了靈活性和擴展性。開發者可通過配置或注解定制各組件(如替換視圖技術、增加消息轉換器等),適應不同項目需求。理解組件協作流程有助于調試和優化應用,例如自定義異常處理或優化參數綁定邏輯。

(望各位潘安、各位子健/各位彥祖、于晏不吝賜教!多多指正!🙏)

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

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

相關文章

Spring Boot(七):Swagger 接口文檔

1. Swagger 簡介 1.1 Swagger 是什么&#xff1f; Swagger 是一款 RESTful 風格的接口文檔在線自動生成 功能測試功能軟件。Swagger 是一個規范和完整的框架&#xff0c;用于生成、描述、調用和可視化 RESTful 風格的 Web 服務。目標是使客戶端和文件系統作為服務器以同樣的…

cursor 彈出在簽出前,請清理倉庫工作樹 窗口

問題出現的背景&#xff1a;是因為我有兩臺電腦開發&#xff0c;提交后&#xff0c;另一個電腦的代碼是舊的&#xff0c;這個時候我想拉取最新的代碼&#xff0c;就會出現如下彈窗&#xff0c;因為這個代碼暫存區有記錄或者工作區有代碼的修改&#xff0c;所以有沖突&#xff0…

Cocos Creator3.8.6拖拽物體的幾種方式

文章目錄 前言一、第一種通過UILocation二、第二種通過UIDelta實現總結 前言 在游戲開發中&#xff0c;拖拽物體是一個非常常見的交互功能&#xff0c;無論是用于UI元素的拖動&#xff0c;還是場景中物體的移動&#xff0c;拖拽操作都能極大地提升用戶體驗。Cocos Creator 3.8…

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

隨著人工智能技術的飛速發展&#xff0c;本地部署大型語言模型&#xff08;LLM&#xff09;已成為許多技術愛好者的熱門選擇。本地部署不僅能夠保護隱私&#xff0c;還能提供更靈活的使用體驗。本文將詳細介紹如何在 Mac mini M2&#xff08;24GB 內存&#xff09;上部署 DeepS…

《UE5_C++多人TPS完整教程》學習筆記33 ——《P34 關卡與大廳之間的過渡(Transition Level And Lobby)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P34 關卡與大廳之間的過渡&#xff08;Transition Level And Lobby&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer,…

Nginx 配置與常用命令速查手冊

Nginx 配置文件結構 Linux 中 Nginx 的配置文件&#xff1a; 通常位于 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。 Nginx 采用模塊化設計&#xff0c;主要分為以下部分&#xff1a; 1. 全局塊 配置與服務器整體相關的參數&#xff0c;如工作進程數、日…

Vscode 便用快捷鍵設置教程

文章目錄 簡介&#xff1a;1. go to define (跳轉到函數定義的位置)2. go to declaration (跳轉到函數聲明的位置)3. move line &#xff08;上下移動本行代碼&#xff09;3.1上下復制本行代碼 4. 前進和后退&#xff08;就是前進到光標上一次停留的位置&#xff0c;和后退到那…

Vim 常用快捷鍵大全:跳轉、編輯、查找替換全解析

摘要&#xff1a; Vim 是一款非常強大的文本編輯器&#xff0c;許多程序員和系統管理員都離不開它。 本文詳細介紹了 Vim 編輯器中的常用快捷鍵和命令&#xff0c;從基本模式、光標移動、編輯操作到查找替換&#xff0c;再到文件保存等常用操作&#xff0c;幫助你快速上手并提…

【實戰篇】【深度解析DeepSeek:從機器學習到深度學習的全場景落地指南】

一、機器學習模型:DeepSeek的降維打擊 1.1 監督學習與無監督學習的"左右互搏" 監督學習就像學霸刷題——給標注數據(參考答案)訓練模型。DeepSeek在信貸風控場景中,用邏輯回歸模型分析百萬級用戶數據,通過特征工程挖掘出"凌晨3點頻繁申請貸款"這類魔…

Vue核心知識:Vue動態權限到按鈕完整方案

為了進一步實現上面提到的動態路由功能&#xff0c;并且加入對每個路由的權限控制&#xff08;即增、刪、改、查按鈕的權限控制&#xff09;&#xff0c;我們需要對數據庫、后端接口、前端的設計做一些改進和擴展。下面我將詳細描述如何在現有方案的基礎上加入對路由的增、刪、…

swift 開發效率提升工具

安裝github copliot for xcode github/CopilotForXcode brew install --cask github-copilot-for-xcode安裝swiftformat for xcode brew install swiftformatXcode Swift File代碼格式化-SwiftFormat

Trae智能協作AI編程工具IDE:如何在MacBook Pro下載、安裝和配置使用Trae?

Trae智能協作AI編程工具IDE&#xff1a;如何在MacBook Pro下載、安裝和配置使用Trae&#xff1f; 一、為什么選擇Trae智能協作IDE&#xff1f; 在AI編程新時代&#xff0c;Trae通過以下突破性功能重新定義開發體驗&#xff1a; 雙向智能增強&#xff1a;AI不僅提供代碼補全&a…

【推薦項目】023-游泳俱樂部管理系統

023 游泳俱樂部管理系統 游泳俱樂部管理系統概述 前端技術框架&#xff1a; 我們優雅地采用了Vue.js作為游泳俱樂部管理系統的前端基礎框架。Vue.js以其輕盈、高效和易于上手的特點&#xff0c;為我們的用戶界面帶來了極致的流暢性和響應速度。通過Vue.js&#xff0c;我們為…

C語言:51單片機 基礎知識

一、單片機概述 單片機的組成及其特點 單片機是指在一塊芯片上集成了CPU、ROM、RAM、定時器/計數器和多種I/O接口電路等&#xff0c;具有一定規模的微型計算機。 特點&#xff1a; 1、單片機的存儲器以ROM、RAM嚴格分工。 2、采用面向控制的指令系統。 3、單片機的I/O口引腳通…

【計算機網絡入門】初學計算機網絡(八)

目錄 1. S-W協議的信道利用率 2. GBN、SR協議的信道利用率 3.術語補充 3.1 滑動窗口協議 3.2 ARQ協議、連續ARQ協議 4. 信道劃分介質訪問控制 4.1 時分復用&#xff08;TDM&#xff09; 4.2 統計時分復用&#xff08;STDM&#xff09; 4.3 頻分復用&#xff08;FDM&a…

HarmonyOS學習第7天: 文本組件點亮界面的文字魔法棒

一、引言 在 HarmonyOS 那豐富多彩的系統界面中&#xff0c;從簡潔直觀的應用圖標&#xff0c;到交互流暢的操作菜單&#xff0c;再到生動形象的圖文展示&#xff0c;每一處細節都經過精心雕琢&#xff0c;為用戶帶來了獨特而美妙的視覺與交互體驗。而在這琳瑯滿目的界面元素中…

從零開始:H20服務器上DeepSeek R1 671B大模型部署與壓力測試全攻略

前言 最近&#xff0c;我有幸在工作中接觸到了DeepSeek R1 671B模型&#xff0c;這是目前中文開源領域參數量最大的高質量模型之一。DeepSeek團隊在2024年推出的這款模型&#xff0c;以其驚人的6710億參數量和出色的推理性能&#xff0c;引起了業界廣泛關注。 作為一名AI基礎…

Unity中動態切換光照貼圖LightProbe的方法

關鍵代碼&#xff1a;LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三張圖&#xff1a;lightmapColor,lightmapDir,以及一張ShadowMap 這里只操作前兩張&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

實例分割 | yolov11訓練自己的數據集

前言 因工作要求使用的都是yolov5系列的模型&#xff0c;今天學習一下最先進的yolov11&#xff0c;記錄一下環境配置及訓練過程。 1.項目下載及環境安裝 源碼位置&#xff1a;yolov11 可以看到&#xff0c;這里要求python版本大于等于3.8&#xff0c;我這里安裝python3.10.…

大模型推理時的尺度擴展定律

大模型推理時的尺度擴展定律 FesianXu at 20250212 at Wechat Search Team 前言 大模型的尺度擴展定律告訴我們&#xff1a;『LLM的性能會隨著模型的參數量、模型的訓練量、模型的訓練數據量的增加而增加』。訓練存在尺度擴展定律&#xff0c;測試也存在尺度擴展定律&#xff…