Spring MVC入門

? ? ? ? 介紹了Spring MVC框架的概念、特征及核心功能,通過案例詳細介紹了Spring MVC開發所需要的開發環境以及基本的開發步驟。

一、Spring MVC框架概述

????????Spring MVC是Spring框架的一個模塊,是一個基于Java的實現了MVC設計模式的輕量級Web框架。它通過一套注解和接口,讓簡單的Java類成為處理請求的控制器,無需實現任何接口,同時支持REST風格的編程。

1. Spring MVC主要特征

  1. 清晰的職責分離:將控制器、模型對象、分派器以及處理程序對象的角色分開

  2. 靈活配置:支持基于XML和注解的配置方式

  3. 可重用的業務代碼:可以使用現有的業務對象作為命令或表單對象

  4. 可定制的綁定和驗證:支持類型轉換和驗證

  5. 強大的視圖技術:支持JSP、Velocity、FreeMarker等多種視圖技術

  6. REST支持:原生支持REST風格的URL

  7. 國際化支持:內置國際化支持

  8. 主題支持:支持主題和外觀的更改

2.?MVC 與 Spring MVC

????????MVC 是一種廣泛適用的設計模式,而 Spring MVC 是該模式在 Java Web 開發中的一種優秀實現。Spring MVC 通過提供豐富的功能和簡化的開發方式,使開發者能更高效地構建 Web 應用程序,同時保持了 MVC 模式的核心優勢。理解二者的關系有助于在不同場景下做出更合適的技術選擇。

2.1 MVC 設計模式

1. 基本概念

MVC(Model-View-Controller)是一種軟件架構設計模式,將應用程序分為三個核心組件:

  • Model(模型):處理數據和業務邏輯

  • View(視圖):負責數據展示

  • Controller(控制器):處理用戶輸入,協調模型和視圖

2. 典型工作流程

用戶請求 → 控制器 → 調用模型 → 返回數據 → 控制器選擇視圖 → 視圖渲染 → 響應給用戶

2.2 Spring MVC 框架

1. 基本概念

Spring MVC 是基于 Java 的實現 MVC 設計模式的請求驅動型 Web 框架,屬于 Spring Framework 的一部分。

2. 核心組件
組件說明
DispatcherServlet前端控制器,接收所有請求
HandlerMapping請求到處理器的映射
Controller實際處理請求的組件
ModelAndView封裝模型和視圖信息
ViewResolver視圖解析器
3. 請求處理流程

1. 用戶發送請求 → DispatcherServlet

2. DispatcherServlet 查詢 HandlerMapping → 找到對應 Controller

3. Controller 調用業務邏輯 → 返回 ModelAndView

4. DispatcherServlet 查詢 ViewResolver → 解析視圖

5. 視圖渲染 → 返回響應

3.?Spring MVC 工作流程

3.1?Spring MVC 的請求執行順序

(1)用戶向服務端發送一次請求,在滿足?web.xml?文件中前端控制器的匹配規則的前提下,這個請求在 Tomcat 的解析下,會先到前端控制器 DispatcherServlet(也叫中央控制器)。如我們發出*.action?的請求,則只對以“.action”結尾的請求路徑進行處理。某些訪問 JSP 的頁面請求則不會被框架攔截處理。

(2)DispatcherServlet 作為框架的核心,通過處理器映射器(框架提供 SimpleUrlHandlerMapping 類,也可能是其他的映射器類),從映射文件中根據請求路徑找到對應的處理器類,并得到該類的實例對象。

(3)DispatcherServlet 通過處理器適配器(框架提供的一個類),對處理類的實例對象進行適配器處理以及參數綁定,并將請求轉移到處理類中進行業務處理。

(4)處理類通過實現框架提供的 Controller 接口,最終完成適配功能。并在這里完成具體的業務邏輯功能,將數據和視圖信息封裝到 ModelAndView 對象中,并返回給 DispatcherServlet 處理。

(5)DispatcherServlet 獲取從處理器返回的 ModelAndView 對象后,交給視圖解析器(框架中提供的功能類)解析,并顯示在相應的視圖中。

3.2 Spring MVC 框架的核心接口

(1)前端控制器(DispatcherServlet):它也稱為中央控制器,是整個請求響應的控制中心。組件的調用都由它統一調度。配置在?web.xml?文件中,隨服務器啟動而實例化。

(2)簡單處理器映射器(SimpleUrlHandlerMapping):根據用戶訪問的 URL 映射到對應的后端處理器?Handler,并將該處理器的實例返回給前端控制器。

(3)處理器適配器(HandlerAdapter):常用的有?SimpleControllerHandlerAdapter,該功能組件在框架中默認運行。它用于封裝參數數據,綁定視圖等。

(4)視圖解析器(ViewResolver):常用的有?InternalResourceViewResolver,在框架中該功能組件默認運行。它用于將?ModelAndView?邏輯視圖解析為具體的視圖(如 JSP)。

(5)后端處理器(Handler):即由程序員編寫的處理類,對用戶具體請求進行處理,該類必須實現框架提供的?Controller?接口,才能作為處理器完成組件功能。

(6)處理器中使用的類(ModelAndView):用于封裝數據和視圖信息,并返回給前端控制器。該類實現了對原生?Servlet?中?Request?對象的封裝,因此可以作為域對象封裝數據,并在視圖中用 EL 表達式取出數據。

二、案例——Spring MVC框架實現模擬登錄

案例說明:使用Spring MVC框架進行用戶登錄驗證

1.新建web項目并引入依賴?

在Idea中配置Tomcat并運行第一個servlet程序——初試Jakarta EE項目 https://blog.csdn.net/m0_74808313/article/details/142817862?sharetype=blog&shareId=142817862&sharerefer=APP&sharesource=m0_74808313&sharefrom=link

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.3</version></dependency><!--    spring基本依賴--><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>3.0.0</version><type>maven-plugin</type></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.1.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.22.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.22.0</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifactId><version>3.0.1</version><type>maven-plugin</type></dependency>

2. 配置Spring MVc的前端控制器

????????Spring MVC 框架通過前端控制器對符合匹配規則的客戶端請求進行統一的攔截處理。這些匹配規則放置在 Spring MVC 的配置文件中,框架通過默認的路徑去加載這些文件。

配置文件路徑:在?Webapp/WEB-INF/web.xml?中進行配置。

配置內容:由于 Spring MVC 框架的前端控制器是一個?Servlet,該?Servlet?在前面的支持 JAR 包中存在。其配置方式與?Servlet?的配置一致,具體代碼如下。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--  配置前端控制器  --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.action</url-pattern><!--   截所有請求并交由DispatcherServlet處理     -->
<!--        <url-pattern>/</url-pattern>--></servlet-mapping>
</web-app>

3. 配置 Spring MVC 的核心映射文件?springmvc-servlet.xml

文件路徑:在?Webapp/WEB-INF?目錄下新建?springmvc-servlet.xml。文件名來源于?web.xml?配置的前端控制器的名稱與后綴?-servlet,前端控制器在加載過程中會自動在該路徑下尋找該映射文件。因此該文件的路徑和文件名不能隨意更改。如要更改,則需在?web.xml?中配置前端控制器時,修改其默認的映射文件路徑和文件名,這里暫時不做講解。

配置內容如下
(1)xml?文件中的約束
(2)配置訪問路徑與后臺處理器之間的映射。該配置需要框架提供的映射類?SimpleUrlHandlerMapping?來完成請求路徑的跳轉。

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="org.rainpet"></context:component-scan><context:property-placeholder location="classpath:db.properties"/><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/></bean><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven transaction-manager="transactionManager"/><mvc:annotation-driven/><import resource="classpath:mybatisConfig.xml"/><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation" value="classpath:mybatisConfig.xml"/><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/><property name="configuration"><bean class="org.apache.ibatis.session.Configuration"><property name="mapUnderscoreToCamelCase" value="true"/></bean></property></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 掃描所有dao接口 --><property name="basePackage" value="org.rainpet.mapper"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean><!-- 配置訪問路徑與后臺處理器之間的映射   --><bean id="loginController" class="org.rainpet.LoginController"></bean><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/login.action">loginController</prop><!--  配置了一個SimpleUrlHandlerMapping,將URL路徑/login映射到loginController,用于處理登錄請求    -->
<!--                <prop key="/login">loginController</prop>--></props></property></bean>
</beans>

4. 新建登錄頁面login.jsp和登錄成功后的頁面success,jsp

文件路徑:在?Webapp/?目錄下新建?login.jsp、success,jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登錄</title>
</head>
<body><form action="/springMvc01/login.action" method="post">用戶名:<input type="text" name="userName"><br>密碼:<input type="password" name="password"><br><input type="submit" value="登錄"></form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登錄成功</title>
</head>
<body><h1>登錄成功</h1>${userName}
</body>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>error</title>
</head>
<body><h1>error</h1>${info}
</body>

5. 新建登錄處理器LoginController.java

package org.rainpet;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {String userName = request.getParameter("userName");String password = request.getParameter("password");ModelAndView mav=new ModelAndView();if(password!=null&&password.equals("123456")){mav.addObject("userName","歡迎您:"+userName);mav.setViewName("success.jsp");}else {mav.addObject("info","用戶名或密碼錯誤");mav.setViewName("error.jsp");}return mav;}
}

7. 啟動TomCat

瀏覽器地址欄輸入http://localhost:8080/springMvc01/login.jsp,到登錄界面,實現登錄

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

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

相關文章

貪心算法求解邊界最大數

貪心算法求解邊界最大數&#xff08;拼多多2504、排列問題&#xff09; 多多有兩個僅由正整數構成的數列 s1 和 s2&#xff0c;多多可以對 s1 進行任意次操作&#xff0c;每次操作可以置換 s1 中任意兩個數字的位置。多多想讓數列 s1 構成的數字盡可能大&#xff0c;但是不能比…

Ubuntu ZLMediakit的標準配置文件(rtsp->rtmp->hls)

最近在工作中遇到不生成hls資源的問題,后面發現是配置文件有誤,特此記錄正確的config.ini配置文件,方便查閱。 最終解決方案,通過下面這種格式可以訪問到flv視頻,具體為什么不太清楚,rtmp格式:rtmp://39.113.48.113:8089/live/1744168516937396175 記錄最終解決方案:ht…

# LeetCode 1007 行相等的最少多米諾旋轉

LeetCode 1007 行相等的最少多米諾旋轉 原題英文&#xff1a;Minimum Domino Rotations For Equal Row 難度&#xff1a;中等 | 標簽&#xff1a;數組、貪心 1?題目重述 給定兩行長度相同的多米諾骨牌&#xff1a; tops[i] 表示第?i?張骨牌上面的數字&#xff1b;bottoms[…

大數據技術:從趨勢到變革的全景探索

??個人主頁??:一ge科研小菜雞-CSDN博客 ????期待您的關注 ???? 在數字化時代的浪潮下,大數據已經不再是一個陌生的概念。從日常生活中的社交媒體,到企業決策支持系統,再到公共管理的大數據應用,它正在改變著我們的工作和生活方式。隨著技術的進步,傳統的數據…

前端八股Day5——XHS某中廠實習前端一面

沒寫完&#xff0c;睡醒補 CSS盒模型 //出現頻率好高&#xff0c;感覺每次寫面經都遇到 W3C標準盒模型(content-box)&#xff1a;盒子寬高width/heightpaddingbordermargin IE怪異盒模型(border-box)&#xff1a;盒子寬高width/heigth(包括padding和border)margin 默認標準切換…

INP指標

什么是INP&#xff08;Interaction to Next Paint&#xff09; 參考網站&#xff1a;webVital-INP文檔 定義與核心目標 INP 是一項穩定的 Core Web Vitals 指標&#xff0c;通過統計用戶訪問期間所有符合條件的互動約定時間&#xff0c;評估網頁對用戶操作的總體響應能力。最…

剖析擴散模型(Denoising Diffusion Probabilistic Models)

文章目錄 1. 前言2. 前向擴散過程(Forward Diffusion)3. 反向生成過程&#xff08;Reverse Process&#xff09;4. 訓練和推理過程中的偽代碼5. 訓練過程代碼實現&#xff08;Training&#xff09;5.1 時間嵌入模塊——TimeEmbedding5.2 前向擴散過程——GaussianDiffusionTrai…

基于 Spring Boot 瑞吉外賣系統開發(九)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;九&#xff09; 保存菜品 菜品管理頁面提供了一個“新增菜品”按鈕&#xff0c;單擊該按鈕時&#xff0c;會打開新增菜品頁面。 請求路徑/dish&#xff0c;請求方法POST&#xff0c;參數使用DishDto類接收。 DishDto 添加f…

w317汽車維修預約服務系統設計與實現

&#x1f64a;作者簡介&#xff1a;多年一線開發工作經驗&#xff0c;原創團隊&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的網站項目。 代碼可以查看文章末尾??聯系方式獲取&#xff0c;記得注明來意哦~&#x1f339;贈送計算機畢業設計600個選題excel文…

【Agent搭建】利用coze平臺搭建一個AI銷售?

目錄 一、關于coze 核心功能 二、搭建屬于你自己智能體 備注&#xff1a;&#xff08;以下說明比較需要調整的板塊&#xff09; 1、從Prompt工程開始 2、搭建工作流 3、添加知識 三、總結 一、關于coze Coze是字節跳動推出的AI應用開發平臺&#xff0c;專注于幫助用戶快速…

Sharding-JDBC分庫分表中的熱點數據分布不均勻問題及解決方案

引言 在現代分布式應用中&#xff0c;使用Sharding-JDBC進行數據庫的分庫分表是提高系統性能和擴展性的常見策略。然而&#xff0c;在實際應用中&#xff0c;某些特定的數據&#xff08;如最新訂單、熱門商品等&#xff09;可能會成為“熱點”&#xff0c;導致這些部分的數據處…

DSP48E2 的 MAC模式功能仿真

DSP48E2 仿真代碼&#xff1a; 測試的功能為 P i ( A D ) ? B P i ? 1 P_{i} (AD) * B P_{i-1} Pi?(AD)?BPi?1? timescale 1ns / 1nsmodule dsp_tb;// 輸入reg CLK;reg CE;reg SCLR;reg signed [26:0] A, D;reg signed [17:0] B;// 輸出wire signed [47:0] P;par…

抽象工廠模式(Abstract Factory Pattern)

很好&#xff01;你現在已經開始接觸設計模式了&#xff0c;而**抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09;是一種常用于“創建一系列相關產品”**的經典設計模式。 我會一步步幫你理解&#xff1a; &#x1f9e0; 一句話解釋 抽象工廠模式&#xff1a;提…

Thymeleaf模板引擎從入門到實戰:Spring Boot整合與核心用法詳解

在 Java Web 開發的世界里&#xff0c;模板引擎是連接后端數據與前端展示的重要橋梁。Thymeleaf 憑借其強大的功能和簡潔的語法&#xff0c;逐漸成為眾多開發者的首選。如果你正在尋找一款能夠讓你的 Web 應用開發更加高效、代碼更加優雅的模板引擎&#xff0c;那么 Thymeleaf …

【HarmonyOS】作業三 UI

目錄 一. 單選題&#xff08;共10題&#xff0c;10分&#xff09; 1. (單選題, 1分)關于Tabs組件頁簽的位置設置&#xff0c;下面描述錯誤的是 2. (單選題, 1分)下面哪個組件不能包含子組件? 3. (單選題, 1分)ArkTS語言的實現計數器功能的組件名稱是以下哪個? 4. (單選題…

《算法筆記》10.6小節——圖算法專題->拓撲排序 問題 C: Legal or Not

題目描述 ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When so…

博客信息管理/博客管理

&#x1f6e0; 博客管理模塊&#xff1a;設計建議 你應該以To B 的后臺系統思路來設計&#xff0c;但保持簡單、輕量級、自己易維護是關鍵。下面是針對你這個場景的建議。 &#x1f9f1; 前端頁面結構&#xff08;React/Vue 可用&#xff09; 頁面 說明 博客列表頁 展示所有博…

全平臺開源即時通訊IM框架MobileIMSDK:7端+TCP/UDP/WebSocket協議,鴻蒙NEXT端已發布,5.7K Stars

一、基本介紹 MobileIMSDK是一套全平臺原創開源IM通信層框架&#xff1a; 超輕量級、高度提煉&#xff0c;lib包50KB以內&#xff1b;精心封裝&#xff0c;一套API同時支持UDP、TCP、WebSocket三種協議&#xff08;可能是全網唯一開源的&#xff09;&#xff1b;客戶端支持iOS…

SpringBoot商城平臺系統設計與開發

概述 SpringBoot商城平臺系統實現了商品展示、購物車、訂單管理等商城核心功能&#xff0c;適合作為計算機專業設計項目或商城項目開發參考&#xff0c;實現商城平臺的核心功能&#xff0c;學習商品管理、訂單處理、支付集成等關鍵技術實現。 主要內容 1. 前臺用戶功能模塊 …

【網絡原理】深入理解HTTPS協議

本篇博客給大家帶來的是網絡原理的知識點, 由于時間有限, 分三天來寫, 本篇為線程第三篇,也是最后一篇. &#x1f40e;文章專欄: JavaEE初階 &#x1f680;若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分享給誰,那就分享給薯條. 你們的支持是我不斷創作的動…