深入剖析Spring MVC

一、Spring MVC 概述

1. 什么是 Spring MVC?

Spring MVC 是基于 Spring 框架的 Web 框架,它實現了 MVC 設計模式,將應用程序分為三個核心部分:

  • Model:封裝應用程序的數據和業務邏輯。

  • View:負責渲染數據(通常是 HTML 頁面)。

  • Controller:處理用戶請求并協調 Model 和 View。

2. Spring MVC 的優勢

  • 松耦合:通過清晰的職責分離,降低代碼的耦合度。

  • 靈活性:支持多種視圖技術(如 JSP、Thymeleaf、FreeMarker 等)。

  • 強大的數據綁定:自動將請求參數綁定到 Java 對象。

  • 易于測試:Controller 是 POJO(Plain Old Java Object),易于單元測試。

  • 與 Spring 生態無縫集成:可以輕松整合 Spring 的其他模塊(如 Spring Security、Spring Data 等)。


二、Spring MVC 的核心組件

1. DispatcherServlet

DispatcherServlet?是 Spring MVC 的核心,負責接收所有的 HTTP 請求并將其分發給相應的 Controller。

2. HandlerMapping

HandlerMapping?負責將請求映射到對應的 Controller。

3. Controller

Controller 是處理用戶請求的核心組件,通常使用?@Controller?注解標記。

4. ModelAndView

ModelAndView?是 Controller 返回的結果,包含模型數據(Model)和視圖名稱(View)。

5. ViewResolver

ViewResolver?負責根據視圖名稱解析實際的視圖(如 JSP 頁面)。

6. HandlerInterceptor

HandlerInterceptor?用于在請求處理前后執行額外的邏輯(如權限檢查、日志記錄等)。


三、Spring MVC 的工作流程

關鍵階段解析

????????1. 請求分發

?????DispatcherServlet?接收請求后,委托?HandlerMapping?查找匹配的控制器。

????????2. 參數處理

? ? ? HandlerAdapter?負責方法參數綁定(支持?@RequestParam@RequestBody?等注解)。

????????3. 攔截器鏈

?????HandlerInterceptor?在預處理、后處理、完成回掉三個階段插入邏輯。

????????4. 視圖渲染

?????ViewResolver?根據邏輯視圖名定位物理視圖,View?對象將模型數據轉換為響應內容。

四、Spring MVC 的配置

1. 基于 XML 的配置

1.1 在?web.xml?中配置?DispatcherServlet

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

?1.2? 在?spring-mvc-config.xml?中配置 Spring MVC

<context:component-scan base-package="com.example.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" />
</bean>

2. 基于 JavaConfig 的配置

2.1 在?web.xml?中配置?DispatcherServlet

=================== 配置與 1.1 相同 ==================

2.2 使用?@Configuration?和?@EnableWebMvc?注解配置 Spring MVC

@Configuration
@EnableWebMvc
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}
}

五、Spring MVC 的核心注解

1.?@Controller

????????標記一個類為 Controller。

2.?@RequestMapping

????????將請求 URL 映射到 Controller 的方法。

3.?@RequestParam

????????將請求參數綁定到方法參數。

4.?@ModelAttribute

????????將請求參數綁定到模型對象。

5.?@ResponseBody

????????將方法返回值直接寫入 HTTP 響應體。

6.?@PathVariable

????????將 URL 中的變量綁定到方法參數。

六、Spring MVC 的高級特性

1. 文件上傳

使用?MultipartFile?處理文件上傳:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file) {// 處理文件return "uploadSuccess";
}

2. 異常處理

使用?@ExceptionHandler?處理異常:

@ExceptionHandler(UserNotFoundException.class)
public String handleUserNotFound() {return "error/userNotFound";
}

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

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

相關文章

機器學習入門-讀書摘要

先看了《深度學習入門&#xff1a;基于python的理論和實踐》這本電子書&#xff0c;早上因為入迷還坐過站了。。 因為里面的反向傳播和鏈式法則特別難懂&#xff0c;又網上搜了相關內容進行進一步理解&#xff0c;參考的以下文章&#xff08;個人認為都講的都非常好&#xff0…

【AI】mac 本地部署 Dify 實現智能體

下載 Ollama 訪問 Ollama 下載頁&#xff0c;下載對應系統 Ollama 客戶端。或者參考文章【實戰AI】macbook M1 本地ollama運行deepseek_m1 max可以跑deepseek嗎-CSDN博客 dify 開源的 LLM 應用開發平臺。提供從 Agent 構建到 AI workflow 編排、RAG 檢索、模型管理等能力&am…

[實現Rpc] 消息抽象層的具體實現

目錄 具象層 _ 消息抽象的實現 信息的抽象類 實現 JsonMessage JsonRequest & JsonResponse 消息-不同消息分裝實現 實現 Request RpcRequest TopicRequest ServiceRequest Response RpcResponse TopicResponse ServiceResponse 實現 生產工廠 本篇文章繼 …

計算機考研之數據結構:深入解析最大公約數與歐幾里得算法

一、生活中的公約數應用 在日常生活中&#xff0c;經常需要處理"均分分配"問題。例如&#xff1a;要將24塊巧克力和18塊餅干平均分給小朋友&#xff0c;最多能分給幾個小朋友&#xff1f;這就是典型的求最大公約數問題。 二、基本概念詳解 約數與公約數 約數&…

NCHAR_CS和CHAR_CS,導致UNION ALL 時,提示SQL 錯誤 [12704] [72000]: ORA-12704: 字符集不匹配

檢查涉及的數據表和列的字符集設置 -- 查詢表的字符集 SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE NLS_CHARACTERSET;-- 查詢列的字符集&#xff08;對于特定表&#xff09; SELECT column_name, character_set_name FROM all_tab_columns W…

算法之 跳躍游戲

文章目錄 55.跳躍游戲思路參考&#xff1a;56.合并區間 55.跳躍游戲 55.跳躍游戲 靈神思路 思路分析&#xff1a; 兩種思路&#xff0c;思路1是我們可以直接維護當前到達i的時候所能到達的最右的邊界mr&#xff0c;如果i>mr就說明無法到達i,否則就是可以到達&#xff1b;…

在C#中動態訪問對象屬性時,用表達式樹可以獲得高效性能

在C#中如何用表達式樹動態訪問對象屬性的問題。用戶可能已經知道反射的基本用法&#xff0c;但想用表達式樹來提高性能&#xff0c;因為表達式樹編譯后的委托執行速度比反射快。 首先&#xff0c;表達式樹的基本概念。表達式樹允許在運行時構建代碼&#xff0c;并編譯成可執行的…

深入解析 Flutter 性能優化:從原理到實踐

深入解析 Flutter 性能優化&#xff1a;從原理到實踐的全面指南 Flutter 是一個高性能的跨平臺框架&#xff0c;但在開發復雜應用時&#xff0c;性能問題仍然可能出現。性能優化是開發高質量 Flutter 應用的關鍵。本篇博客將從 Flutter 的渲染原理出發&#xff0c;結合實際場景…

使用 Python 爬蟲獲取微店快遞費用 item_fee API 接口數據

在電商運營中&#xff0c;快遞費用是影響商家利潤和用戶體驗的重要因素之一。微店作為國內知名的電商平臺&#xff0c;提供了豐富的 API 接口供開發者使用&#xff0c;其中也包括查詢商品快遞費用的接口。通過調用微店的 item_fee 接口&#xff0c;開發者可以獲取指定商品的快遞…

MySQL基本操作——包含增刪查改(環境為Ubuntu20.04,MySQL5.7.42)

1.庫的操作 1.1 創建數據庫 語法&#xff1a; 說明&#xff1a; 大寫的表示關鍵字 [] 是可選項 CHARACTER SET: 指定數據庫采用的字符集 COLLATE: 指定數據庫字符集的校驗規則 1.2 創建案例 創建一個使用utf8字符集的db1數據庫 create database db1 charsetutf8; …

Spring Boot 定時任務:輕松實現任務自動化

在現代應用開發中&#xff0c;定時任務是一個常見的需求。比如&#xff0c;我們可能需要定時清理過期數據、定時發送郵件通知等。 操作流程 開啟定時任務注解 在啟動類添加注解EnableScheduling 設置時間&#xff08;固定時間間隔&#xff09; 使用 Scheduled 注解創建定時…

七星棋牌全開源修復版源碼解析:6端兼容,200種玩法全面支持

本篇文章將詳細講解 七星棋牌修復版源碼 的 技術架構、功能實現、二次開發思路、搭建教程 等內容&#xff0c;助您快速掌握該棋牌系統的開發技巧。 1. 七星棋牌源碼概述 七星棋牌修復版源碼是一款高度自由的 開源棋牌項目&#xff0c;該版本修復了原版中的多個 系統漏洞&#…

【Rust中級教程】1.12. 生命周期(進階) Pt.2:生命周期變型、協變、不變、逆變

喜歡的話別忘了點贊、收藏加關注哦&#xff08;加關注即可閱讀全文&#xff09;&#xff0c;對接下來的教程有興趣的可以關注專欄。謝謝喵&#xff01;(&#xff65;ω&#xff65;) 這篇文章在Rust初級教程的基礎上對生命周期這一概念進行了補充&#xff0c;建議先看【Rust自…

Vue 項目登錄的基本流程

Vue 用戶登錄的基本流程包括以下6個步驟&#xff1a; 步驟&#xff1a; 1. 創建登錄表單 在前端&#xff0c;首先要創建一個登錄表單&#xff0c;用戶輸入賬號&#xff08;用戶名、郵箱、手機號等&#xff09;和密碼。 示例&#xff1a;Login.vue <template><div…

【算法】回溯算法

回溯算法 什么是回溯 人生無時不在選擇。在選擇的路口&#xff0c;你該如何抉擇 ..... 回溯&#xff1a; 是一種選優搜索法&#xff0c;又稱為試探法&#xff0c;按選優條件向前搜索&#xff0c;以達到目標。但當探索到某一步時&#xff0c;發現原先選擇并不優或達不到目標&am…

SpringAI系列 - RAG篇(三) - ETL

目錄 一、引言二、組件說明三、集成示例一、引言 接下來我們介紹ETL框架,該框架對應我們之前提到的階段1:ETL,主要負責知識的提取和管理。ETL 框架是檢索增強生成(RAG)數據處理的核心,其將原始數據源轉換為結構化向量并進行存儲,確保數據以最佳格式供 AI 模型檢索。 …

2025 docker可視化管理面板DPanel的安裝

1.什么是 DPanel &#xff1f; DPanel 是一款 Docker 可視化管理面板&#xff0c;旨在簡化 Docker 容器、鏡像和文件的管理。它提供了一系列功能&#xff0c;使用戶能夠更輕松地管理和部署 Docker 環境。 軟件特點&#xff1a; 可視化管理&#xff1a;提供直觀的用戶界面&#…

基于Python的深度學習音樂推薦系統(有配套論文)

音樂推薦系統 提供實時音樂推薦功能&#xff0c;根據用戶行為和偏好動態調整推薦內容 Python、Django、深度學習、卷積神經網絡 、算法 數據庫&#xff1a;MySQL 系統包含角色&#xff1a;管理員、用戶 管理員功能&#xff1a;用戶管理、系統設置、音樂管理、音樂推薦管理、系…

微信小程序---計劃時鐘設計與實現

微信小程序-計劃時鐘已上線,歡迎各位小伙伴的測試和使用~(微信小程序搜計劃時鐘即可使用) 在這篇博客中,我們將探討如何在微信小程序中設計和實現一個任務管理功能,該功能允許用戶添加、刪除和查看任務。任務管理系統的核心是基于日期和時間的任務管理,可以設置任務的開…

RPA-實例(UiPath )

UiPath 是一個流行的機器人流程自動化(RPA)工具,用于自動化重復性任務。以下是一個簡單的實例,展示如何使用 UiPath 自動化一個常見的任務:從 Excel 文件中讀取數據并將其輸入到網頁表單中。 實例:從 Excel 讀取數據并自動填寫網頁表單 步驟 1:準備工作 安裝 UiPath S…