什么是Spring Web MVC?
定義:Spring Web MVC是基于Servlet構(gòu)建的原始Web框架,從一開始就包含在Spring框架中.它的正式名稱"Spring Web MVC"來自其源模塊的名稱(Spring-webmvc),但是它通常被稱為"Spring MVC".
什么是Servlet?
Servlet是一種實(shí)現(xiàn)動(dòng)態(tài)頁面的技術(shù).準(zhǔn)確地來講Servlet是一套Java Web開發(fā)的規(guī)范,或者是一套Java Web開發(fā)的技術(shù)標(biāo)準(zhǔn).只有規(guī)范并不能做任何事情,必須要有人來實(shí)現(xiàn)它.所謂實(shí)現(xiàn)Servlet規(guī)范,就是真正編寫代碼去實(shí)現(xiàn)Servlet規(guī)范提到的各種功能,包括類,方法,屬性等.
從定義中可以得到一個(gè)關(guān)鍵信息: Spring Web MVC是一個(gè)Web框架.?之后我們簡(jiǎn)稱為:Spring MVC
然而想真正搞清楚什么是Spring MVC, 我們首先要搞懂MVC是什么.
MVC定義
MVC是Model View Controller的縮寫,它是軟件工程中的一種軟件架構(gòu)設(shè)計(jì)模式,它把軟件系統(tǒng)分為模型,視圖和控制器三個(gè)基本部分.
View(視圖):指在應(yīng)用程序中專門與瀏覽器進(jìn)行交互,展示數(shù)據(jù)的資源.
Model(模型):是應(yīng)用程序中的主體部分,用來處理程序中數(shù)據(jù)邏輯的部分.
Controller(控制器):?可以理解為一個(gè)分發(fā)器,用來決定對(duì)于視圖發(fā)來的請(qǐng)求,需要用哪一個(gè)模型來處理, 以及處理完后需要跳回到哪個(gè)視圖.即用來連接視圖和模型.
比如去飯店吃飯
客戶進(jìn)店之后,服務(wù)員來接待客戶點(diǎn)餐,客戶點(diǎn)完餐之后,把客戶菜單交給前廳.前廳根據(jù)客戶菜單給后廚下達(dá)命令.后廚負(fù)責(zé)做飯,做完之后,再根據(jù)菜單告訴服務(wù)員,這是X號(hào)餐桌客人的飯.?
在這個(gè)過程中
服務(wù)員就是View(視圖),負(fù)責(zé)接待客戶,幫助客戶點(diǎn)餐,以及給顧客端飯.
前廳就是Controller(控制器),根據(jù)用戶的點(diǎn)餐情況,來選擇給哪個(gè)后廚下達(dá)命令.
后廚就是Model(模型),根據(jù)前廳的要求來完成客戶的用餐需求.?
?什么是Spring MVC
MVC是一種架構(gòu)設(shè)計(jì)模式,也是一種思想,而Spring MVC是對(duì)MVC思想的具體實(shí)現(xiàn).除此之外,Spring MVC還是一個(gè)Web框架.
總結(jié)來說, Spring MVC是一個(gè)實(shí)現(xiàn)了Web模式的MVC框架.
所以Spring MVC主要的關(guān)注有兩個(gè)點(diǎn): 1.MVC; 2.Web框架.
Spring boot和Spring MVC之間的關(guān)系:
Spring Boot是實(shí)現(xiàn)Spring MVC的一種方式.
Spring Boot可以添加很多依賴,借助這些依賴實(shí)現(xiàn)不同的功能.Spring Boot通過添加Spring Web MVC框架,來實(shí)現(xiàn)Web功能.
比如:廚房可以用來做飯,但真實(shí)實(shí)現(xiàn)做飯功能的是火及各種做飯的相關(guān)食材和工具.
廚房就好比Spring Boot,廚房可以裝柜子,實(shí)現(xiàn)收納功能,裝燃?xì)庠畹?實(shí)現(xiàn)做飯功能.
做飯這個(gè)事,就是MVC,在幾千年前,有火有食材就可以做飯.?
不過Spring在實(shí)現(xiàn)MVC時(shí),也結(jié)合自身項(xiàng)目的特點(diǎn),做了一點(diǎn)改變,相對(duì)而言,使用這個(gè)圖更合適:?
不過核心沒有變
比如上面的例子中,去飯店吃飯.一些飯店是前廳負(fù)責(zé)接待客戶,幫助客戶點(diǎn)餐,也就是Controller來負(fù)責(zé)接收用戶的請(qǐng)求.?
學(xué)習(xí)Spring MVC
既然是Web框架,那么當(dāng)在瀏覽器中輸入url之后,我們的Spring MVC就可以感知到用戶的請(qǐng)求,并給予響應(yīng).(我們學(xué)習(xí)Spring MVC,重點(diǎn)也就是學(xué)習(xí)如何通過瀏覽器和用戶程序進(jìn)行交互).
主要分以下幾個(gè)方面:
1.建立連接:將用戶(瀏覽器)和Java程序連接起來,也就是訪問一個(gè)地址能夠調(diào)用到我們的Spring程序.
2.請(qǐng)求:用戶請(qǐng)求的時(shí)候會(huì)帶一些參數(shù),在程序中要想辦法獲取到參數(shù),所以請(qǐng)求這塊主要是獲取到參數(shù)的功能.
3.響應(yīng):執(zhí)行業(yè)務(wù)邏輯之后,要把程序執(zhí)行的結(jié)果返回給用戶,也就是響應(yīng).?
比如用戶去銀行存款
1.建立連接:去柜臺(tái)
2.請(qǐng)求:帶著銀行卡,身份證去存款.
3.響應(yīng):銀行返回一張存折.?
對(duì)于Spring MVC來說,掌握了以上三個(gè)功能就相當(dāng)于掌握了Spring MVC.
建立連接
在Spring MVC中使用@RequestMapping 來實(shí)現(xiàn)URL路由映射,也就是瀏覽器連接程序的作用.?
創(chuàng)建一個(gè)UserController類,實(shí)現(xiàn)用戶通過瀏覽器和程序的交互,具體實(shí)現(xiàn)的代碼如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
//路由器規(guī)則注冊(cè)
@RequestMapping("/sayHi")
public String sayHi() {
return "hello, Spring MVC";
}
}
方法名和路徑名稱無需一致.
接下來訪問:http://127.0.0.1:8080/sayHi,就可以看到程序返回的程序了.
?
@RequestMapping注解介紹
@RequestMapping是SpringMapping 是Spring Web MVC應(yīng)用程序中最常被用到的注解之一,它是用來注冊(cè)接口的路由映射的.
表示服務(wù)收到請(qǐng)求時(shí),路徑為/sayHi的請(qǐng)求就會(huì)調(diào)用sayHi這個(gè)方法的代碼.
路由映射:當(dāng)用戶訪問一個(gè)URL時(shí),將用戶的請(qǐng)求對(duì)應(yīng)到應(yīng)用程序中某個(gè)類的某個(gè)方法的過程就叫做路由映射.?
既然@RequestMapping已經(jīng)可以達(dá)到我們的目的了,我們?yōu)槭裁催€要加@RestController呢?
我們把@RestController去掉,再來訪問一次:
可以看到,程序報(bào)了404,找不到頁面.
這就是@RestController起到的作用
一個(gè)項(xiàng)目中,會(huì)有很多類,每個(gè)類可能有很多的方法,Spring程序怎么知道要執(zhí)行哪個(gè)方法呢?
Spring會(huì)對(duì)所有的類進(jìn)行掃描,如果類加了注解@RestController, Spring才會(huì)去看這個(gè)類里面的方法有沒有加@RequestMapping這個(gè)注解,當(dāng)然它的作用不止這一點(diǎn),咱們先用.
@RequestMapping使用
@RequestMapping即可修飾類,也可以修飾方法,當(dāng)修飾類和方法時(shí),訪問的地址是類路徑 + 方法路徑.
@RequestMapping標(biāo)識(shí)一個(gè)類:設(shè)置映射請(qǐng)求的請(qǐng)求路徑的初始信息.
@RequestMapping標(biāo)識(shí)一個(gè)方法:設(shè)置映射請(qǐng)求路徑的具體信息.?
@RequestMapping("/user")
@RequestController
public class UserController {
@RequestMapping("/sayHi")
public String sayHi() {
return "Hello, Spring MVC";
}
}
訪問地址:http://127.0.0.1:8080/user/sayHI
注意:@RequestMapping的URL路徑最前面加不加 / (斜杠)都可以,Spring程序啟動(dòng)時(shí),會(huì)進(jìn)行判斷,如果前面沒有加 / , Spring就會(huì)加上一個(gè) / .
訪問之后仍然是可以正常響應(yīng)的. (通常情況下,我們都會(huì)加上 /?)?
@RequestMapping的路徑也可以是多層路徑,最終訪問時(shí),依然是類路徑 + 方法路徑.
?
@RequestMapping("/user/m1")
@RequestController
public class UserController {
@RequestMapping("/say/hi")
public String sayHi() {
return "Hello, Spring MVC";
}
}
?
訪問路徑:http://127.0.0.1:8080/user/m1/say/hi
?@RequestMapping是GET還是POST請(qǐng)求?
我們來測(cè)試一下就可以得到結(jié)論了.
GET請(qǐng)求:
瀏覽器發(fā)送的類型都是get,通過以上案例,可以看出來@RequestMapping支持get請(qǐng)求.
POST請(qǐng)求:
我們通過form表單來構(gòu)造請(qǐng)求.
創(chuàng)建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="發(fā)送請(qǐng)求">
</form>
</body>
</html>
訪問方式為http://127.0.0.1:8080/test.html
從運(yùn)行結(jié)果可以看出:@RequestMapping既支持Get請(qǐng)求,又支持Post請(qǐng)求.同理,也支持其它的請(qǐng)求方式.?文章來源:http://www.zghlxwxcb.cn/news/detail-840752.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-840752.html
到了這里,關(guān)于Spring Web MVC入門(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!