Spring MVC 框架學習筆記:從入門到精通的實戰指南

目錄

1. Spring MVC 概述

2. Spring MVC 項目搭建

3. Spring MVC 執行流程

4. Spring MVC @RequestMapping 注解

5. Spring MVC 獲取請求參數

6. Spring MVC 常見注解

7. Spring MVC 響應處理

8. Spring MVC SSM 整合

9. Spring MVC 作用域傳參

10. Spring MVC 上傳

11. Spring MVC 下載

12. Spring MVC 攔截器

13. Spring MVC 異常處理

14. Spring MVC 其他注解

總結


前言

在 Java Web 開發領域,Spring MVC 框架無疑是眾多開發者的選擇之一。它基于 Spring 框架,提供了強大的 MVC 架構支持,幫助開發者構建高性能、可維護的 Web 應用程序。本文將按照清晰的目錄結構,帶你深入了解 Spring MVC 的核心概念、功能特性以及實戰應用。

1. Spring MVC 概述

Spring MVC 是 Spring 框架的一部分,專門用于構建 Web 應用程序。它遵循 MVC(Model-View-Controller)設計模式,將應用程序分為模型、視圖和控制器三個部分,從而實現代碼的高內聚和低耦合。

2. Spring MVC 項目搭建

搭建一個 Spring MVC 項目需要以下步驟:

  1. 創建 Maven 項目 :在 IDE 中創建一個新的 Maven 項目,并添加 Spring MVC 的依賴。

xml

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.10</version>
</dependency>
  1. 配置前端控制器 :在 web.xml 文件中配置 DispatcherServlet,作為前端控制器。

xml

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
  1. 配置視圖解析器 :在 Spring 配置文件中配置視圖解析器,指定視圖文件的前綴和后綴。

xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/>
</bean>

3. Spring MVC 執行流程

Spring MVC 的執行流程如下:

  1. 用戶發送請求 :用戶通過瀏覽器發送 HTTP 請求到服務器。

  2. 前端控制器接收請求DispatcherServlet 接收到請求,并將其分發到合適的處理器。

  3. 處理器映射器查找處理器HandlerMapping 查找與請求匹配的處理器(Controller)。

  4. 處理器適配器調用處理器HandlerAdapter 調用處理器方法,并返回 ModelAndView 對象。

  5. 視圖解析器解析視圖ViewResolver 將視圖名稱解析為實際的視圖對象。

  6. 視圖渲染 :視圖對象使用模型數據進行渲染,并將結果返回給用戶。

4. Spring MVC @RequestMapping 注解

@RequestMapping 是 Spring MVC 中最常用的注解之一,用于將請求映射到處理器方法上。以下是一個簡單的示例:

java

@Controller
public class MyController {@RequestMapping("/hello")public String hello() {return "hello";}
}

5. Spring MVC 獲取請求參數

Spring MVC 提供了多種方式獲取請求參數,包括:

  • 通過方法參數獲取 :直接在方法參數中聲明需要的參數名稱。

java

@Controller
public class MyController {@RequestMapping("/greet")public String greet(@RequestParam("name") String name, Model model) {model.addAttribute("message", "Hello, " + name + "!");return "greet";}
}
  • 通過 @ModelAttribute 獲取 :將請求參數綁定到 Java 對象上。

java

@Controller
public class MyController {@RequestMapping("/user")public String getUser(@ModelAttribute("user") User user, Model model) {model.addAttribute("user", user);return "userDetail";}
}

6. Spring MVC 常見注解

Spring MVC 中常用的注解包括:

  • @Controller :標記一個類為控制器。

  • @RequestMapping :將請求映射到處理器方法上。

  • @RequestParam :獲取請求參數。

  • @ModelAttribute :綁定請求參數到 Java 對象。

  • @ResponseBody :將方法返回值直接寫入響應體。

7. Spring MVC 響應處理

Spring MVC 支持多種響應處理方式,包括:

  • 返回字符串 :返回視圖名稱,由視圖解析器解析為實際視圖。

java

@Controller
public class MyController {@RequestMapping("/hello")public String hello() {return "hello";}
}
  • 返回 ModelAndView :包含模型數據和視圖信息。

java

@Controller
public class MyController {@RequestMapping("/hello")public ModelAndView hello() {ModelAndView modelAndView = new ModelAndView("hello");modelAndView.addObject("message", "Hello, Spring MVC!");return modelAndView;}
}
  • 返回 JSON 數據 :通過 @ResponseBody 注解返回 JSON 數據。

java

@Controller
public class MyController {@RequestMapping("/user")@ResponseBodypublic User getUser() {User user = new User("John", 30);return user;}
}

8. Spring MVC SSM 整合

SSM(Spring + Spring MVC + MyBatis)是常見的 Java Web 開發框架組合。整合步驟如下:

  1. 添加依賴 :在 pom.xml 中添加 Spring、Spring MVC 和 MyBatis 的依賴。

  2. 配置數據源 :配置數據庫連接信息。

xml

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/>
</bean>
  1. 配置事務管理器 :配置事務管理器,管理數據庫事務。

xml

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean>
  1. 配置 MyBatis :配置 MyBatis 的 SqlSessionFactory 和 Mapper。

xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

9. Spring MVC 作用域傳參

Spring MVC 支持多種作用域傳參,包括:

  • 請求作用域(Request Scope) :默認作用域,參數在請求范圍內有效。

  • 會話作用域(Session Scope) :參數在會話范圍內有效。

java

@Controller
public class MyController {@RequestMapping("/login")public String login(@RequestParam("username") String username, HttpSession session) {session.setAttribute("user", username);return "home";}
}
  • 應用作用域(Application Scope) :參數在應用范圍內有效。

10. Spring MVC 上傳

Spring MVC 提供了簡單的文件上傳功能,通過 @RequestParam 注解獲取上傳的文件對象。

java

@Controller
public class FileController {@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file) {try {file.transferTo(new File("path/to/save/" + file.getOriginalFilename()));} catch (IOException e) {e.printStackTrace();}return "uploadSuccess";}
}

11. Spring MVC 下載

Spring MVC 也支持文件下載功能,通過設置響應頭和輸出流實現。

java

@Controller
public class FileController {@GetMapping("/download")public void download(HttpServletResponse response) {File file = new File("path/to/download/file.txt");response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=file.txt");try (FileInputStream fis = new FileInputStream(file);OutputStream os = response.getOutputStream()) {byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {os.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();}}
}

12. Spring MVC 攔截器

Spring MVC 支持攔截器,用于在請求處理的不同階段執行特定邏輯。以下是一個簡單的攔截器示例:

java

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("Pre Handle");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("Post Handle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("After Completion");}
}

注冊攔截器:

xml

<bean class="org.springframework.web.servlet.HandlerInterceptorAdapter"><property name="interceptors"><list><ref bean="myInterceptor"/></list></property>
</bean>

13. Spring MVC 異常處理

Spring MVC 提供了全局異常處理器,通過 @ControllerAdvice 注解實現。

java

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ModelAndView handleException(Exception e) {ModelAndView modelAndView = new ModelAndView("error");modelAndView.addObject("message", e.getMessage());return modelAndView;}
}

14. Spring MVC 其他注解

Spring MVC 還提供了其他一些有用的注解,如:

  • @InitBinder :用于初始化數據綁定。

java

@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.setFieldDefaultPrefix("user.");}
}
  • @SessionAttributes :用于將模型屬性添加到會話中。

java

@Controller
@SessionAttributes("user")
public class MyController {// ...
}

總結

Spring MVC 作為 Spring 框架的重要組成部分,提供了強大的 Web 開發能力。通過學習 Spring MVC 的核心概念和功能特性,結合實戰應用,可以快速構建高性能、可維護的 Web 應用程序。希望本文能夠幫助你深入理解 Spring MVC 的精髓,為你的開發工作提供有力支持。如果你有任何問題或建議,歡迎在評論區留言,我們一起交流學習!

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

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

相關文章

RK3568開發筆記-AD7616調試筆記

目錄 前言 一、AD7616介紹 高分辨率 高速采樣速率 寬模擬輸入范圍 集成豐富功能 二、原理圖連接 三、設備樹配置 四、內核驅動配置 五、AD芯片測試 總結 前言 在嵌入式數據采集領域,將模擬信號精準轉換為數字信號至關重要。AD7616 作為一款性能卓越的 16 位模數轉換器…

【對話推薦系統】Towards Topic-Guided Conversational Recommender System 論文閱讀

Towards Topic-Guided Conversational Recommender System 論文閱讀 Abstract1 Introduction2 Related Work2.1 Conversation System2.2 Conversational Recommender System2.3 Dataset for Conversational Recommendation 3 Dataset Construction3.1 Collecting Movies for Re…

ASP.NET Core 8.0學習筆記(二十八)——EFCore反向工程

一、什么是反向工程 1.原則&#xff1a;DBFirst 2.反向工程&#xff1a;根據數據庫表來反向生成實體類 3.生成命令&#xff1a;Scaffold-DbContext ‘連接字符串’ 字符串示例&#xff1a; Server.;DatabaseDemo1;Trusted_Connectiontrue; MultipleActiveResultSets true;Tru…

springcloud和dubbo的區別

Spring Cloud和Dubbo作為微服務架構中非常流行的兩個框架&#xff0c;它們在多個方面存在顯著的區別。以下是對兩者區別的詳細分析&#xff1a; 1. 初始定位和生態環境 Spring Cloud&#xff1a;定位為微服務架構下的一站式解決方案&#xff0c;依托于Spring平臺&#xff0c;…

【大模型LLM】DeepSeek LLM Scaling Open-Source Language Models with Longtermism

深度探索LLM&#xff1a;以長期主義擴展開源語言模型 0.論文摘要 開源大語言模型&#xff08;LLMs&#xff09;的快速發展確實令人矚目。然而&#xff0c;以往文獻中描述的擴展規律得出了不同的結論&#xff0c;這為LLMs的擴展蒙上了一層陰影。我們深入研究了擴展規律&#…

C#快速調用DeepSeek接口,winform接入DeepSeek查詢資料 C#零門檻接入DeepSeek C#接入DeepSeek源代碼下載

下載地址<------完整源碼 在數字化轉型加速的背景下&#xff0c;企業應用系統對智能服務的需求日益增長。DeepSeek作為先進的人工智能服務平臺&#xff0c;其自然語言處理、圖像識別等核心能力可顯著提升業務系統的智能化水平。傳統開發模式下&#xff0c;C#開發者需要耗費大…

Qt常用控件之多行輸入框QTextEdit

多行輸入框QTextEdit QTextEdit 是一個多行輸入框控件&#xff0c;支持富文本和 markdown 格式&#xff0c;當文本內容超出編輯框的范圍時能自動提供滾動條。 QPlainTextEdit 是只支持富文本格式的多行輸入框&#xff0c;屬性和使用上與 QTextEdit 幾乎沒有區別。 QTextEdit屬…

VC++零基礎入門之系列教程 【附錄E MFC快速參考指南】

附錄E MFC快速參考指南 E.1 創建窗口 使用M F C CWnd wnd; W n d . C r e a t e E x ( E xSt y l e , C l a s s N a m e , Wi n d o w N a m e , S t y l e , x , y, Wi d t h , H e i g h t , P a r e n t , M e n u , P a r a m ) ; 使用A P I HWND hwnd=::CreateWi n d …

【前端】react+ts 輪播圖的實現

一、場景描述 在很多網站的頁面中都有輪播圖&#xff0c;所以我想利用react.js和ts實現一個輪播圖。自動輪播圖已經在前面實現過了&#xff0c;如&#xff1a;https://blog.csdn.net/weixin_43872912/article/details/145622444?sharetypeblogdetail&sharerId145622444&a…

python與C系列語言的差異總結(4)

如果具有傳統編譯型語言的經驗&#xff0c;大家可能會對是否使用字典而猶豫不決&#xff0c;擔心字典的效率比列表或數組低。事實上Python字典的執行速度已經相當快了。Python語言的許多內部特性都依賴于字典&#xff0c;為提高字典的效率已經投入了大量的心血。Python的所有數…

[Web 安全] 反序列化漏洞 - 學習筆記

關注這個專欄的其他相關筆記&#xff1a;[Web 安全] Web 安全攻防 - 學習手冊-CSDN博客 0x01&#xff1a;反序列化漏洞 — 漏洞介紹 反序列化漏洞是一種常見的安全漏洞&#xff0c;主要出現在應用程序將 序列化數據 重新轉換為對象&#xff08;即反序列化&#xff09;的過程中…

深入理解C語言中的位段

在C語言編程中&#xff0c;我們常常會遇到需要對內存進行精細控制的場景&#xff0c;位段&#xff08;bit - field&#xff09;便是C語言提供的一種強大工具&#xff0c;它允許我們在一個字節或多個字節內對數據進行按位的定義和操作&#xff0c;極大地提高了內存使用效率。 一…

實現使用RBF(徑向基函數)神經網絡模擬二階電機數學模型中的非線性干擾,以及使用WNN(小波神經網絡)預測模型中的非線性函數來抵消遲滯影響的功能

下面將詳細介紹如何實現使用RBF&#xff08;徑向基函數&#xff09;神經網絡模擬二階電機數學模型中的非線性干擾&#xff0c;以及使用WNN&#xff08;小波神經網絡&#xff09;預測模型中的非線性函數來抵消遲滯影響的功能。我們將按照以下步驟進行&#xff1a; 步驟1&#x…

Grouped-Query Attention(GQA)詳解: Pytorch實現

Grouped-Query Attention&#xff08;GQA&#xff09;詳解 Grouped-Query Attention&#xff08;GQA&#xff09; 是 Multi-Query Attention&#xff08;MQA&#xff09; 的改進版&#xff0c;它通過在 多個查詢頭&#xff08;Query Heads&#xff09;之間共享 Key 和 Value&am…

ReentrantLock 用法與源碼剖析筆記

&#x1f4d2; ReentrantLock 用法與源碼剖析筆記 &#x1f680; 一、ReentrantLock 核心特性 &#x1f504; 可重入性&#xff1a;同一線程可重復獲取鎖&#xff08;最大遞歸次數為 Integer.MAX_VALUE&#xff09;&#x1f527; 公平性&#xff1a;支持公平鎖&#xff08;按等…

基于GO語言的車牌識別api技術-港澳車牌文字識別

隨著科技的飛速發展&#xff0c;智能化管理逐漸滲透到我們生活的方方面面。車牌識別技術作為智能交通的重要組成部分&#xff0c;不僅極大提升了交通管理的效率&#xff0c;還為市民出行帶來了更多便利。而港澳地區的車牌識別技術&#xff0c;憑借其高效、精準、快速的特點&…

基于 DeepSeek LLM 本地知識庫搭建開源方案(AnythingLLM、Cherry、Ragflow、Dify)認知

寫在前面 博文內容涉及 基于 Deepseek LLM 的本地知識庫搭建使用 ollama 部署 Deepseek-R1 LLM知識庫能力通過 Ragflow、Dify 、AnythingLLM、Cherry 提供理解不足小伙伴幫忙指正 &#x1f603;,生活加油 我站在人潮中央&#xff0c;思考這日日重復的生活。我突然想&#xff0c…

PCB設計常用布局布線方法

PCB設計常用布局布線方法 **1.模塊化布局&#xff0c;**先放大器件再放小器件。 立創在原理圖框完后&#xff0c;在PCB快捷shiftp 2.布局對齊美觀 3.重要信號線優先處理 分類再畫 4.減少Stub布線&#xff1a;就是避免為連接的線段&#xff0c;防止產生“天線效應”&#xff…

Mac 版 本地部署deepseek ? RAGflow 知識庫搭建流程分享(附問題解決方法)

安裝&#xff1a; 1、首先按照此視頻的流程一步一步進行安裝&#xff1a;(macos版&#xff09;ragflowdeepseek 私域知識庫搭建流程分享_嗶哩嗶哩_bilibili 2、RAGflow 官網文檔指南&#xff1a;https://ragflow.io 3、RAGflow 下載地址&#xff1a;https://github.com/infi…

娛閑放鬆篇2

最近看了好多動畫和以前的新聞&#xff0c;都挺有想法&#xff0c;可以了解一下 有些是N年前的&#xff0c;希望見怪莫怪 若說如何用最小作用量去理解世界觀的話&#xff0c;其實就是書&#xff0c;以動畫的角度來看&#xff0c;日本動畫足以 一.高達系列 一系列的利用巨大…