Spring MVC完全指南 - 從入門到精通

目錄

1. Spring MVC簡介

2. MVC架構模式

3. Spring MVC核心組件

4. 請求處理流程

5. 控制器詳解

6. 請求映射

7. 參數綁定

8. 數據驗證

9. 視圖解析器

10. 模型數據處理

11. 異常處理

12. 攔截器

13. 文件上傳下載

14. RESTful API

15. 配置詳解

總結


1. Spring MVC簡介

什么是Spring MVC?

Spring MVC是Spring框架中的一個模塊,專門用于構建Web應用程序。它基于MVC(Model-View-Controller)設計模式,提供了一個清晰的架構來分離業務邏輯、數據和表示層。

主要特點

  • 松耦合:各層之間依賴性低,易于測試和維護
  • 靈活性:支持多種視圖技術(JSP、Thymeleaf、JSON等)
  • 易于擴展:提供豐富的擴展點
  • 注解驅動:通過注解簡化配置

優勢

  • 與Spring生態系統無縫集成
  • 強大的數據綁定和驗證功能
  • 靈活的URL映射
  • 支持RESTful架構
  • 優秀的測試支持

2. MVC架構模式

MVC模式概念

MVC是一種軟件架構模式,將應用程序分為三個核心組件:

Model(模型)
  • 作用:負責數據和業務邏輯
  • 包含:實體類、服務層、數據訪問層
  • 特點:獨立于用戶界面
View(視圖)
  • 作用:負責用戶界面的展示
  • 包含:JSP頁面、Thymeleaf模板、JSON響應
  • 特點:只負責顯示,不處理業務邏輯
Controller(控制器)
  • 作用:處理用戶請求,協調Model和View
  • 包含:接收請求、調用業務邏輯、返回視圖
  • 特點:作為Model和View之間的橋梁

MVC工作原理

用戶請求 → Controller → Model → Controller → View → 用戶響應

3. Spring MVC核心組件

DispatcherServlet(前端控制器)

  • 作用:Spring MVC的核心,負責分發請求
  • 功能:接收所有請求,分發給相應的處理器

HandlerMapping(處理器映射器)

  • 作用:根據請求URL找到對應的處理器
  • 常用:RequestMappingHandlerMapping

HandlerAdapter(處理器適配器)

  • 作用:執行找到的處理器
  • 功能:適配不同類型的處理器

ViewResolver(視圖解析器)

  • 作用:根據邏輯視圖名解析出具體視圖
  • 常用:InternalResourceViewResolver

HandlerInterceptor(攔截器)

  • 作用:在請求處理前后執行特定邏輯
  • 應用:權限檢查、日志記錄等

4. 請求處理流程

完整流程圖解

1. 用戶發送請求到DispatcherServlet
2. DispatcherServlet查詢HandlerMapping找到處理器
3. DispatcherServlet調用HandlerAdapter執行處理器
4. 處理器執行業務邏輯,返回ModelAndView
5. DispatcherServlet將ModelAndView傳給ViewResolver
6. ViewResolver解析出具體View
7. View渲染模型數據
8. 返回響應給用戶

詳細步驟說明

  1. 請求接收:DispatcherServlet接收HTTP請求
  2. 映射查找:根據URL查找對應的Controller方法
  3. 參數綁定:將請求參數綁定到方法參數
  4. 業務處理:執行Controller方法
  5. 視圖解析:解析返回的視圖名
  6. 響應返回:渲染視圖并返回給客戶端

5. 控制器詳解

@Controller注解

@Controller
public class UserController {// 控制器方法
}

@RestController注解

@RestController  // 等同于 @Controller + @ResponseBody
public class ApiController {// RESTful AP

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

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

相關文章

實戰使用docker compose 搭建 Redis 主從復制集群

文章目錄 前言技術積累1、Redis 主從復制機制2、Docker Compose 編排3、 Redis 配置文件定制4、 驗證主從狀態5、 自動化部署與維護 環境準備實戰演示創建redis目錄及配置1、創建redis目錄2、創建redis配置文件 啟動redis集群服務1、創建docker-compose編排文件2、編排docker-c…

【學習筆記】RTSP-Ovnif-GB28181

【學習筆記】RTSP-Ovnif-GB28181 一、RTSP_RTP_RTCP RTSP(Real Time Streaming Protocol),RFC2326,實時流傳輸協議,是TCP/IP協議體系中的一個應用層協議。 RTP協議詳細說明了在互聯網上傳遞音頻和視頻的標準數據包格…

stm32-c8t6實現語音識別(LD3320)

目錄 LD3320介紹: 功能引腳 主要特色功能 通信協議 端口信息 開發流程 stm32c8t6代碼 LD3320驅動代碼: LD3320介紹: 內置單聲道mono 16-bit A/D 模數轉換內置雙聲道stereo 16-bit D/A 數模轉換內置 20mW 雙聲道耳機放大器輸出內置 5…

RAG技術全解析:從概念到實踐,構建高效語義檢索系統——嵌入模型與向量數據庫搭建指南

一、RAG技術概述:為什么需要RAG? 1.1 什么是RAG? RAG(Retrieval-Augmented Generation)是一種結合檢索與生成能力的AI架構。其核心思想是通過外部知識庫動態增強大語言模型(LLM)的生成能力&…

【資源分享】手機玩轉經典游戲!小雞模擬器1.9.0:PSP/NDS/GBA完美運行!

阿燦今天給大家推薦一款小雞模擬器,這是一個老款PC和掌上游戲機模擬器。完美模擬街機(fbamamemameplus).PS、PSP、FC(NES)SFC(SNES)、GBA、GBC、MD、NDS、DC、NGP、WS (WSC) PCE、ONS 等18款經典掌機游戲機。小雞模擬器同時也提供海量熱門的漢化版游戲免…

matlab脈沖信號并繪制波形2025.6.11

以下是一個使用MATLAB生成5V、10MHz脈沖信號并繪制波形的示例代碼: % 5V 10MHz脈沖信號仿真 clc; clear; close all; % 參數設置 voltage = 5; % 信號幅度(V) frequency = 10e6; % 脈沖頻率(10MHz) duty_cycle =

ElasticJob初探

依賴版本 JDK版本是&#xff1a;jdk17 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version></parent>zookeeper elasticjo…

【Vue3】(三)vue3中的pinia狀態管理、組件通信方式及總結、插槽

目錄 一、vue3的pinia 1、什么是pinia&#xff1f; 2、為什么Vue3選擇pinia&#xff1f; 3、使用pinia的好處 4、安裝pinia 2、項目配置 3、存儲/讀取pinia中的數據 4、修改pinia中的數據 5、storeToRefs&#xff08;保持store中數據的響應式&#xff09; 6、getters 7、…

WEB3全棧開發——面試專業技能點P1Node.js / Web3.js / Ethers.js

一、Node.js 事件循環 Node.js 的事件循環&#xff08;Event Loop&#xff09;是其異步編程的核心機制&#xff0c;它使得 Node.js 可以在單線程中實現非阻塞 I/O 操作。 &#x1f501; 簡要原理 Node.js 是基于 libuv 實現的&#xff0c;它使用事件循環來處理非阻塞操作。事件…

大數據學習棧記——Neo4j的安裝與使用

本文介紹圖數據庫Neofj的安裝與使用&#xff0c;操作系統&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安裝 Neofj可以進行官網安裝&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我這里安裝是添加軟件源的方法 最新版…

web架構4------(nginx常用變量,nginx中英文自動匹配,lnmp網站架構,正向代理,反向代理,負載均衡)

一.前言 本期來介紹nginx最后幾個知識點&#xff0c;看著要說的內容很多&#xff0c;其實一點也不多&#xff0c;都是所見即所得的東西。 二.nginx常用變量 2.1 常用變量 $args 請求中的參數&#xff0c;也叫查詢參數&#xff0c;如www.123.com/1.php?a1&b2的$args就是…

openeuler系統(CentOs)圖形化桌面黑屏/丟失(開啟VNC服務沖突)

1. VNC服務開啟如下&#xff1a; https://zhuanlan.zhihu.com/p/5049263261 在centos8系統上使用tigervnc-server搭建VNC_centos8 tigervnc-server-CSDN博客 2. 上述操作完成后&#xff0c;連接VNC仍會出現黑屏&#xff0c;則需要編輯/root/.vnc/xstartup&#xff1a; [運維…

MySQL:Prepared Statement 預處理語句

預處理語句&#xff08;Prepared Statements&#xff09;是 MySQL 中一種用于執行 SQL 查詢的高效、安全的方法。通過使用預處理語句&#xff0c;可以顯著提升查詢性能&#xff0c;并防止 SQL 注入攻擊。本文將詳細介紹 MySQL 預處理語句的概念、使用方法及其優勢。 一、預處理…

EPPLUS——CAD c#讀寫EXCEL的第三方庫

EPPLUS(可支持NET35) 在 CAD 的 C# 二次開發中&#xff0c;使用 EPPLUS 庫處理 Excel 文件具有以下顯著優點&#xff0c;尤其在兼容性、便捷性和性能等方面契合 CAD 項目的需求&#xff1a; 1. 跨.NET 版本兼容性強&#xff0c;適配 CAD 多環境部署 多框架支持&#xff1a;EP…

Linux知識回顧總結----進程狀態

本章將會介紹進程的一些概念&#xff1a;馮諾伊曼體系結構、進程是什么&#xff0c;怎么用、怎么表現得、進程空間地址、物理地址、虛擬地址、為什么存在進程空間地址、如何感性得去理解進程空間地址、環境變量是如何使用的。 目錄 1. 馮諾伊曼體系結構 1.1 是什么 1.2 結論 …

微信小程序之bind和catch

這兩個呢&#xff0c;都是綁定事件用的&#xff0c;具體使用有些小區別。 官方文檔&#xff1a; 事件冒泡處理不同 bind&#xff1a;綁定的事件會向上冒泡&#xff0c;即觸發當前組件的事件后&#xff0c;還會繼續觸發父組件的相同事件。例如&#xff0c;有一個子視圖綁定了b…

Android Test3 獲取的ANDROID_ID值不同

Android Test3 獲取的ANDROID_ID值不同 這篇文章來說明上一篇文章中說到的一個現象&#xff1a;在同一個項目中&#xff0c;創建不同的 app module&#xff0c;運行同一段測試代碼&#xff0c;獲取到的 ANDROID_ID 的值不同。 我也是第一次認真研究這個現象&#xff0c;這個還…

JSON 和 LabVIEW Data Types 互相轉換

使用JSONtext C:\Program Files (x86)\National Instruments\LabVIEW 2021\examples\JDP Science\JSONtext JSONtext LabVIEW Data Types.vi

docker和docker-compose的版本對應關系怎么看?

docker和docker-compose的版本對應關系怎么看&#xff1f;最近在安裝這兩個工具&#xff0c;像知道他們的版本對應關系&#xff0c;查了不少資料才找到。 雖然 Docker 和 Docker Compose 的版本并不嚴格綁定&#xff0c;但是在某些情況下&#xff0c;新版本的 Docker Compose …

郵科ODM攝像頭:多維度護航高鐵安全系統方案解析

?高鐵作為現代交通的重要支柱&#xff0c;其安全穩定運行依賴于高效的監控體系。攝像頭系統作為高鐵安全管理的“視覺感知中樞”&#xff0c;憑借多場景覆蓋、智能分析以及環境適應性設計&#xff0c;在行車安全、設備維護、乘客服務等方面發揮著不可或缺的作用。本文將從技術…