什么是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請求的。