Spring MVC 1

什么是Spring Web MVC

官方對Spring MVC的描述是這樣的:Spring Web MVC 是基于Severlet API構建的原始Web框架,從一開始就包含在Spring框架中。它的正式名稱“Spring Web MVC”來自其源模塊的名稱(Spring-webmvc),但它通常被稱為“Spring MVC”。

什么是Servlet呢?
Servlet 是一種實現動態頁面的技術. 準確來講Servlet是?套 Java Web 開發的規范,或者說是?套 Java Web 開發的技術標準. 只有規范并不能做任何事情,必須要有人去實現它. 所謂實現 Servlet 規范,就是真正編寫代碼去實現 Servlet 規范提到的各種功能,包括類、?法、屬性等.
Servlet 規范是開放的,除了 Sun 公司,其它公司也可以實現 Servlet 規范,目前常見的實現了 Servlet 規范的產品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它們都被稱
為"Servlet 容器". Servlet 容器用來管理程序員編寫的 Servlet 類.

從上述定義我們可以得出一個信息:Spring Web MVC是一個Web框架。我們簡稱為:Spring MVC 。

那么什么是MVC呢?

MVC定義

MVC是Model View Controller的縮寫,它是軟件工程中到的一種軟件架構設計模式,它把軟件系統分為模型、視圖和控制器三個基本部分。

View(視圖):指在應用程序中專門用來和瀏覽器進行交互,展示數據的資源。

Model(模型):是應用程序的主體部分,用來處理程序中數據邏輯的部分。

Controller(控制器):可以理解為分發器,用來決定對于視圖發來的請求,需要用哪一個模型來處理,以及處理完后要跳轉回哪一個視圖。即用來連接視圖和模型。

比如我們去面試

我們進到公司之后,會先有一個HR接待我們,然后HR會帶我們去找這個公司對應崗位的負責人,負責人會帶我們去對接和我們面試的面試官。

在這個過程中,HR就是View(視圖),負責接待我們;負責人就是Controller(控制器),根據我們的情況來去對接面試官;面試官就是Model(模型),根據負責人的要求來完成面試。

什么是Spring MVC?

MVC是一種架構設計模式,也是一種思想,而Spring MVC是對MVC思想的具體實現。除此之外,Spring MVC還是一個Web框架。

總的來說,Spring MVC是一個實現了MVC模式的Web框架。所以,Spring MVC是一個實現了MVC模式的Web框架,所以,Spring MVC主要關注有兩個點:1、MVC? ?2、Web框架。

其實,我們早在上一篇文章就已經使用過Spring MVC了,在創建Spring Boot項目是,我們勾選的Spring Web框架其實就是Spring MVC框架:

這時候,有的同學就有疑問了,前面創建的不是Spring Boot 項目嗎?怎么又變成Spring MVC項目了?他們之間到底有著什么樣的關系呢?

Spring Boot 只是實現Spring MVC的其中一種方式而已。Spring Boot可以添加很多的依賴,借助這些依賴實現不同的功能,Spring Boot 通過添加Spring Web MVC框架,來實現web功能。

打個比方:

Spring是火車的話,那么Spring MVC就是賣火車票這個任務,Spring Boot是123

06,Spring MVC和Spring Boot都不能脫離Spring單獨存在,換句話說它們都依賴于Spring。(賣火車票這件事和12306這個程序都不能離開火車),而Spring Boot是實現Spring MVC的一種方式(賣火車票能通過12306售賣,也可以通過售票處售賣)。

不過Spring在實現MVC時,也結合自身特點,做了一些改變,相對而言,下面這個圖或許更加合適一些。?

學習Spring MVC

既然是Web框架,那么當用戶在瀏覽器中輸入了url之后,我們的Spring MVC項目就可以感知到用戶的請求,并給與響應。

咱們學習Spring MVC,重點也就是學習如何通過瀏覽器和用戶程序進行交互。

主要分以下三個方面:

1、建立連接:將用戶(瀏覽器)和Java程序連接起來,也就是訪問一個地址能夠調用到我們的Spring程序。

2、請求:用戶請求時會帶一些參數,在程序中要想辦法獲取到參數,所以請求這塊主要是獲取參數的功能。

3、響應:執行了業務邏輯之后,要把程序執行的結果放回給用戶,也就是響應。

對于Spring MVC來說,掌握了以上三個功能就相當于掌握了Spring MVC。

項目準備

SPringleMVC項目創建和Spring Boot創建項目相同,在創建的時候選擇Spring Web就相當于創建了Spring MVC項目。

創建項目時勾選上Spring Web模塊即可,如下圖所示:

?建立連接

在Spring MVC中使用@RequestMapping來實現URL路由映射,也就是瀏覽器連接程序的作用。

先在工作目錄中,寫一個RequestController類:

再添加上如下代碼和注解:?

@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}

啟動之后,訪問:127.0.0.1:8080/hello?,就可以看到程序返回的數據了。

@RequestMapping注解介紹

@RequestMapping是Spring Web MVC應用程序中最常被用到的注解之一,它是用來注冊接口的路由映射的。表示服務收到請求時,路徑為/hello的請求就會調用sayHello這個方法的代碼。

路由映射:當一個用戶訪問URL時,將用戶的請求對應到程序某個類的某個方法的過程就叫做路由映射。

既然@RequestMapping已經可以達到我們的目的了,我們為什么還要加@RestController呢?

我們可以試著把@RestController去掉,重新啟動服務器后,再訪問一次。

可以看到,程序報了404(Not Found),找不到該頁面,這就是@RestController起到的作用。

一個項目中,會有很多的類,每個類可能會有很多的方法,Spring怎么知道要去執行哪個方法呢?Spring會對所有的類進行掃描,如果類加了注解@RestController,Spring才會去看這個類里面的方法有沒有加@RequestMapping這個注解。當然它的作用不止這一點,我們先用,后面再詳細講解。

@RequestMapping使用

@RequestMapping既可以修飾類,也可以修飾方法,當修飾類和方法時,訪問的地址是類路徑+方法路徑。

@RequestMapping標識一個類:設置映射請求路徑的初始信息。

@RequestMapping標識一個方法:設置映射請求請求路徑的具體信息。

在原有代碼的基礎上,使用@RequestMapping修飾類。

@RequestMapping("/request")
@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}

刷新服務器,并訪問:127.0.0.1:8080/request/hello?

@RequestMapping是GET還是POST請求

GET請求 :

瀏覽器發送的請求類型都是get,通過以上案例,可以看出@RequestMapping支持get請求。

我們也可以通過Fiddler抓包進行查看:

也可以得到:@RequestMapping支持get請求。

Post請求:

我們通過form表單來構造請求:在stactic目錄下創建test.html。

html代碼如下:?

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/request/hello" method="post"><input type="submit" value="提交">
</form>
</body>
</htm

?刷新之后,訪問:標題。

點擊提交的同時,使用Fiddler進行抓包。可以看到@RequestMapping是支持Post請求的。

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

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

相關文章

一個基于若依(ruoyi-vue3)的小項目部署記錄

一、背景 收到朋友的求助&#xff0c;他拿到了一個項目的源代碼&#xff0c;說需要我幫助部署。部署要求是需要域名訪問。 因為沒有文檔和其他資料以及幫助&#xff0c;我先清理了源收到的資料&#xff1a; 1.后端&#xff1a;是java代碼&#xff0c;一看就是若依框架。心里大大…

【實戰總結】WMIC在HW行動中的4類關鍵應用

WMIC命令完全指南&#xff1a;網絡安全運維工程師的深度實踐手冊 關鍵詞&#xff1a;WMIC命令、Windows管理、網絡安全運維、系統信息收集、進程分析、自動化審計 【實戰總結】WMIC在HW行動中的4類關鍵應用 1. 前言 在Windows環境下的網絡安全運維中&#xff0c;WMIC&#x…

LKT4304穩定可靠高兼容性國產安全加密芯片

隨著 IOT 的飛速發展&#xff0c;智能家居&#xff0c;智能汽車&#xff0c;智能工控等物聯網設備和云服務的安全問題成為IOT普及的關鍵障礙。在設計之初就為物聯網產品配備正確的安全解決方案&#xff0c;是幫助預防措施的關鍵所在。LKT4304是凌科芯安專為物聯網應用場景而推出…

Android 網絡開發核心知識點

Android 網絡開發核心知識點 一、基礎網絡通信 1. HTTP/HTTPS 協議 HTTP方法&#xff1a;GET、POST、PUT、DELETE等狀態碼&#xff1a;200(成功)、404(未找到)、500(服務器錯誤)等HTTPS加密&#xff1a;SSL/TLS握手過程報文結構&#xff1a;請求頭/響應頭、請求體/響應體 2. 網…

DVWA靶場通關筆記-弱會話IDs(Weak Session IDs Medium級別)

目錄 一、Session ID 二、代碼審計&#xff08;Medium級別&#xff09; 1、配置security為Medium級別 2、源碼分析 &#xff08;1&#xff09;index.php &#xff08;2&#xff09;Medium.php &#xff08;3&#xff09;對比分析 &#xff08;4&#xff09;滲透思路 三…

編輯器Vim的快速入門

如大家所了解的&#xff0c;Vim是一個很古老的編輯器&#xff0c;但是并沒有隨著時間的流逝消失在編輯器/IDE 的競爭中&#xff0c;Vim 獨創的模式機制和 hjkl 移動光標方式使得使用者在編輯文件時可以雙手不離開鍵盤&#xff0c;極大地提升了工作效率。由于 Vim 學習曲線極為陡…

深度學習核心:從基礎到前沿的全面解析

&#x1f9e0; 深度學習核心&#xff1a;從基礎到前沿的全面解析 &#x1f680; 探索深度學習的核心技術棧&#xff0c;從神經網絡基礎到最新的Transformer架構 &#x1f4cb; 目錄 &#x1f52c; 神經網絡基礎&#xff1a;從感知機到多層網絡&#x1f5bc;? 卷積神經網絡&am…

MySQL索引:數據庫的超級目錄

MySQL索引&#xff1a;數據庫的「超級目錄」 想象你有一本1000頁的百科全書&#xff0c;要快速找到某個知識點&#xff08;如“光合作用”&#xff09;&#xff1a; ? 無索引&#xff1a;逐頁翻找 → 全表掃描&#xff08;慢&#xff01;&#xff09;? 有索引&#xff1a;直接…

景觀橋 涵洞 城門等遮擋物對汽車安全性的影響數學建模和計算方法,需要收集那些數據

對高速公路景觀橋影響行車視距的安全問題進行數學建模&#xff0c;需要將物理幾何、動力學、概率統計和交通流理論結合起來。以下是分步驟的建模思路和關鍵模型&#xff1a;一、 核心建模目標 量化視距&#xff08;Sight Distance, SD&#xff09;&#xff1a;計算實際可用視距…

Git 用戶名和郵箱配置指南:全局與項目級設置

查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看當前項目配置 git config user.name # 查看當前項目name配置 git config user.email # 查看當前項目…

視頻序列和射頻信號多模態融合算法Fusion-Vital解讀

視頻序列和射頻信號多模態融合算法Fusion-Vital解讀概述模型整體流程視頻幀時間差分歸一化TSM模塊視頻序列特征融合模塊跨模態特征融合模塊概述 最近看了Fusion-Vital的視頻-射頻&#xff08;RGB-RF&#xff09;融合Transformer模型。記錄一下&#xff0c;對于實際項目中的多模…

frp內網穿透下創建FTP(解決FTP“服務器回應不可路由的地址。使用服務器地址替代”錯誤)

使用寶塔面板&#xff0c;點擊FTP&#xff0c;下載Pure-FTPd插件 點擊Pure-FTPd插件&#xff0c;修改配置文件&#xff0c;找到PassivePortRange, 修改ftp被動端口范圍為39000 39003&#xff0c;我們只需要4個被動端口即可&#xff0c;多了不好在內網穿透frp的配置文件中增加…

STM32控制四自由度機械臂(SG90舵機)(硬件篇)(簡單易復刻)

1.前期硬件準備 2s鋰電池一個&#xff08;用于供電&#xff09;&#xff0c;stm32f103c8t6最小系統板一個&#xff08;主控板&#xff09;&#xff0c;兩個搖桿&#xff08;用于搖桿模式&#xff09;&#xff0c;四個電位器&#xff08;用于示教器模式&#xff09;&#xff0c…

華為OD機試_2025 B卷_最差產品獎(Python,100分)(附詳細解題思路)

題目描述 A公司準備對他下面的N個產品評選最差獎&#xff0c; 評選的方式是首先對每個產品進行評分&#xff0c;然后根據評分區間計算相鄰幾個產品中最差的產品。 評選的標準是依次找到從當前產品開始前M個產品中最差的產品&#xff0c;請給出最差產品的評分序列。 輸入描述 第…

飛算JavaAI:重塑Java開發效率的智能引擎

飛算JavaAI:重塑Java開發效率的智能引擎 一、飛算JavaAI核心價值 飛算JavaAI是全球首款專注Java語言的智能開發助手,由飛算數智科技(深圳)有限公司研發。它通過AI大模型技術實現: 全流程自動化:從需求分析→軟件設計→代碼生成一氣呵成工程級代碼輸出:生成包含配置類、…

Java和Go各方面對比:現代編程語言的深度分析

Java和Go各方面對比&#xff1a;現代編程語言的深度分析 引言 在當今的軟件開發領域&#xff0c;選擇合適的編程語言對項目的成功至關重要。Java作為一門成熟的面向對象語言&#xff0c;已經在企業級開發中占據主導地位超過25年。而Go&#xff08;Golang&#xff09;作為Google…

CloudCanal:一款企業級實時數據同步、遷移工具

CloudCanal 是一款可視化的數據同步、遷移工具&#xff0c;可以幫助企業構建高質量數據管道&#xff0c;具備實時高效、精確互聯、穩定可拓展、一站式、混合部署、復雜數據轉換等優點。 應用場景 CloudCanal 可以幫助企業實現以下數據應用場景&#xff1a; 數據同步&#xff…

如何發現 Redis 中的 BigKey?

如何發現 Redis 中的 BigKey&#xff1f; Redis 因其出色的性能&#xff0c;常被用作緩存、消息隊列和會話存儲。然而&#xff0c;在 Redis 的使用過程中&#xff0c;BigKey 是一個不容忽視的問題。BigKey 指的是存儲了大量數據或包含大量成員的鍵。它們不僅會占用大量內存&…

Golang讀取ZIP壓縮包并顯示Gin靜態html網站

Golang讀取ZIP壓縮包并顯示Gin靜態html網站Golang讀取ZIP壓縮包并顯示Gin靜態html網站1. 讀取ZIP壓縮包2. 解壓并保存靜態文件3. 設置Gin靜態文件服務基本靜態文件服務使用StaticFS更精細控制單個靜態文件服務4. 完整實現示例5. 高級優化內存映射優化使用Gin-Static中間件6. 部…

參數列表分類法:基本參數與擴展參數的設計模式

摘要 本文提出了我設計的一種新的函數參數設計范式——參數列表分類法&#xff0c;將傳統的"單一參數列表"擴展為"多參數列表協同"模式。通過引入"基本參數列表"和"擴展參數列表"的概念&#xff0c;為復雜對象構建提供了更靈活、更具表…