SpringMVC 基本概念與代碼示例

1. SpringMVC 簡介

SpringMVC 是 Spring 框架中的一個 Web 層框架,基于 MVC(Model-View-Controller) 設計模式,提供了清晰的分層結構,適用于 Web 應用開發

SpringMVC 主要組件

  1. DispatcherServlet(前端控制器):攔截所有請求并進行分發
  2. HandlerMapping(處理器映射器):確定請求由哪個控制器方法來處理
  3. Controller(控制器):負責處理具體的請求邏輯
  4. ViewResolver(視圖解析器):解析視圖,渲染最終頁面
  5. ModelAndView(模型和視圖):封裝數據和視圖信息

SpringMVC 執行流程

在這里插入圖片描述

2. SpringMVC 項目搭建(Spring 6.1.14)

2.1 引入 Maven 依賴

pom.xml 文件中添加以下依賴:

<dependencies><!-- Spring Web --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.1.14</version></dependency><!-- Servlet API --><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.0.0</version><scope>provided</scope></dependency><!-- Jackson 用于 JSON 解析 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.16.0</version></dependency>
</dependencies>

2.2 配置 SpringMVC(Java 配置方式)

2.2.1 Web 初始化配置

使用 WebApplicationInitializer 代替 web.xml,實現 SpringMVC 自動初始化

import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;public class WebAppInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();context.register(SpringMvcConfig.class);ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(context));dispatcher.setLoadOnStartup(1);dispatcher.addMapping("/*");}
}
2.2.2 SpringMVC 配置類
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;@Configuration
@EnableWebMvc
@ComponentScan("com.alivinfer.controller")
public class SpringMvcConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("/static/");}
}

2.3 創建 Controller 處理請求

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@GetMapping("/hello")public String sayHello() {return "Hello, SpringMVC!";}
}

2.4 創建 JSP 視圖

webapp/WEB-INF/views/hello.jsp 文件中:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head><title>Hello SpringMVC</title>
</head>
<body><h2>Hello, SpringMVC</h2>
</body>
</html>

3. 運行與測試

  1. 啟動 Tomcat 或其他 Servlet 容器
  2. 訪問 http://localhost:8080/user/hello,返回 Hello, SpringMVC!
  3. 訪問 http://localhost:8080/hello.jsp,查看 JSP 視圖

4. 可能遇到的問題

4.1 NoSuchMethodError: java.util.LinkedHashSet

如果運行時報 java.util.LinkedHashSet 相關錯誤,可能是 Spring 版本與 Jakarta 依賴不兼容,請檢查以下內容:

  • Spring 6+ 需要 Jakarta EE 9+,務必使用 **jakarta.servlet-api 6.0.0+**
  • 確保 spring-webmvcspring-context 版本一致

4.2 404 Not Found

  • 檢查 WebAppInitializer 是否正確注冊了 DispatcherServlet
  • 確保 @ComponentScan 掃描到了 Controller
  • 試試清理項目 mvn clean,然后 mvn package 重新部署

5. 總結

本文主要介紹了 SpringMVC 的基本概念,并基于 Spring 6.1.14 搭建了一個簡單的 MVC 應用,包括:

  • Maven 依賴
  • DispatcherServlet 配置
  • Controller 控制器
  • 視圖解析
  • 可能遇到的錯誤及解決方案

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

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

相關文章

LuaJIT 學習(1)—— LuaJIT介紹

文章目錄 介紹Extensions Modulesbit.* — Bitwise operationsffi.* — FFI libraryjit.* — JIT compiler controlC API extensionsProfiler Enhanced Standard Library Functionsxpcall(f, err [,args...]) passes arguments例子&#xff1a; xpcall 的使用 load*() handle U…

std::ranges::views::common, std::ranges::common_view

std::ranges::views::common, std::ranges::common_view C20 引入的用于將范圍適配為“通用范圍”的工具&#xff0c;主要解決某些算法需要傳統迭代器對&#xff08;如 begin 和 end 類型相同&#xff09;的問題。 基本概念 1. 功能 適配傳統算法&#xff1a;將范圍&#x…

4.3 數組和集合的初始及賦值

版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請在顯著位置標明本文出處以及作者網名&#xff0c;未經作者允許不得用于商業目的 版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請在顯著位置標明本文出處以及作者網名&#xff0c;未經作者允許不得用于商…

分布式光伏發電的發展現狀與前景

分布式光伏發電的發展現狀與前景 1、分布式光伏發電的背景2、分布式光伏發電的分類2.1、集中式光伏發電2.1.1、特點、原則2.1.2、優點2.1.3、缺點 2.2、分布式光伏發電2.2.1、特點、原則2.2.2、優點2.2.3、缺點 2.3、對比 3、分布式光伏發電的現狀4、分布式光伏發電的應用場景4…

13 | 實現統一的錯誤返回

提示&#xff1a; 所有體系課見專欄&#xff1a;Go 項目開發極速入門實戰課&#xff1b;歡迎加入 云原生 AI 實戰 星球&#xff0c;12 高質量體系課、20 高質量實戰項目助你在 AI 時代建立技術競爭力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;&#xff1b;本節課最終…

DeepSeek結合Mermaid繪圖(流程圖、時序圖、類圖、狀態圖、甘特圖、餅圖)轉載

思維速覽&#xff1a; 本文將詳細介紹如何利用DeepSeek結合Mermaid語法繪制各類專業圖表&#xff0c;幫助你提高工作效率和文檔質量。 ▍DeepSeek入門使用請看&#xff1a;deepseek保姆級入門教程&#xff08;網頁端使用 本地客戶端部署 使用技巧&#xff09; DeepSeek官網…

Java靜態變量與PHP靜態變量的對比

Java的靜態變量在多線程并發的情況下是線程共有的。以下是關鍵點總結&#xff1a; 存儲位置&#xff1a;靜態變量屬于類&#xff0c;存儲在方法區&#xff08;或元空間&#xff09;&#xff0c;這是所有線程共享的內存區域。因此&#xff0c;所有線程訪問的都是同一個靜態變量實…

c++20 Concepts的簡寫形式與requires 從句形式

c20 Concepts的簡寫形式與requires 從句形式 原始寫法&#xff08;簡寫形式&#xff09;等效寫法&#xff08;requires 從句形式&#xff09;關鍵區別說明&#xff1a;組合多個約束的示例&#xff1a;兩種形式的編譯結果&#xff1a;更復雜的約束示例&#xff1a;標準庫風格的約…

上下分層、左右分離的驅動設計思想

之前了解了最簡單的驅動程序、但是不易擴展、現在繼續學習、上下分層、左右分離的驅動設計思想。 1、led_dev.c函數 上層函數&#xff0c;①定義一個結構體&#xff0c;存儲函數用來接應app的函數。②定義一個入口函數&#xff0c;將我們接應的函數告訴內核&#xff0c;給這個…

人工智能在醫療領域的應用:技術革新與未來展望

人工智能&#xff08;AI&#xff09;技術正在重塑醫療行業的面貌。從輔助診斷到藥物研發&#xff0c;從健康管理到手術機器人&#xff0c;AI的廣泛應用不僅提升了醫療效率&#xff0c;還為精準醫療和個性化治療提供了新可能。根據2025年多份研究報告及政策文件&#xff0c;全球…

《歷史代碼分析》5、動態控制列表的列

?? 本系列《歷史代碼分析》為工作中遇到具有代表性的代碼。今天我們講一下&#xff0c;動態展示列表的列&#xff0c;因為找不到代碼了&#xff0c;所有本篇用圖展示。 舉個栗子 ?? 我們希望能夠動態的控制列表的列&#xff0c;例如&#xff0c;英語老師只想知道自己學…

Windows HD Video Converter Factory PRO-v27.9.0-

Windows HD Video Converter Factory PRO 鏈接&#xff1a;https://pan.xunlei.com/s/VOL9TaiuS7rXbu-1kEDndoceA1?pwd7qch# 支持300多種視頻格式轉換&#xff0c;在保留視頻質量的同時&#xff0c;壓縮率可達80%&#xff0c;轉換速度可達50X速率&#xff01; 支持畫面剪切、片…

C++程序設計語言筆記——抽象機制:構造、清理、拷貝和移動

0 應該將構造函數、賦值操作以及析構函數設計為一組匹配的操作。 在C中&#xff0c;構造函數、賦值操作符和析構函數共同管理對象的資源生命周期。為確保資源安全且一致地處理&#xff0c;需將它們作為一組匹配的操作設計。以下是關鍵要點&#xff1a; 為何需要協同設計&…

##Hive安裝-初始化元數據報錯 *** schemaTool failed ***

報錯&#xff1a; org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure 解決方案&#xff1a; 嘗試一&#xff1a;javax.jdo.o…

遠程手機遙控開關原理及應用

遠程手機遙控開關的工作原理主要是通過互聯網傳遞無線信號&#xff0c;控制用電器的一種智能家居產品。 遠程手機遙控開關的基本套件包括&#xff1a;手機APP、網線、家用WIFI中轉無服務器或者是工廠提供的自帶網線端口的中轉服務器、連接用電器的接收器。使用時&#xff0c;手…

Mac java全棧開發環境配置

前言 由于最近手中的windows本子壞了,所以搞了一臺m系列的macbookpro 作為一個開發者 面對新設備最先考慮的應該就是各種sdk、中間件服務、環境變量配置和工具了吧!!! 本文將帶你手把手學習Mac搭建屬于自己的本地開發環境 安裝brew 什么是brew? ?Brew(全稱Homebrew)…

Ubuntu conda虛擬環境不同設備之間遷移

Ubuntu conda環境遷移&#xff08;conda-pack&#xff09; 方法一&#xff1a;壓縮拷貝方法二&#xff1a;conda-pack 在一臺電腦配置好conda虛擬環境后&#xff0c;若在其它電腦需要同樣的環境&#xff0c;可通過如下兩種方式進行遷移。 方法一&#xff1a;壓縮拷貝 找到Ubu…

詳細學習 pandas 和 xlrd:從零開始

詳細學習 pandas 和 xlrd&#xff1a;從零開始 前言 在數據處理和分析中&#xff0c;Excel 文件是最常見的數據格式之一。Python 提供了強大的庫 pandas&#xff0c;可以輕松地處理 Excel 文件中的數據。同時&#xff0c;我們還可以使用 xlrd 來讀取 Excel 文件&#xff0c;尤…

HTMLCSS繪制三角形

1.代碼&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>01triangle</title><s…

vue3-element-admin 前后端本地啟動聯調

一、后端環境準備 1.1、下載地址 gitee 下載地址 1.2、環境要求 JDK 17 1.3、項目啟動 克隆項目 git clone https://gitee.com/youlaiorg/youlai-boot.git數據庫初始化 執行 youlai_boot.sql 腳本完成數據庫創建、表結構和基礎數據的初始化。 修改配置 application-dev.y…