目錄
一、什麼是Spring Web MVC?
1.定義
2.關於MVC
2.1什麼是MVC?
二、學習Sring MVC
1.項目準備
2.@RestController註解的介紹
3.@RequestMapping註解
1.@RequestMapping只用在類上(相當於“只給文件夾起名,不給文件起名”)
2.@RequestMapping只用在方法上(相當於“只給文件起名,不給文件夾起名”)
3.@RequestMapping用在類和方法上(相當於給文件夾和文件都取名)
三、Postman
1.什麼是Postman?
2.關於API
3.傳參介紹
1.普通傳參:通過查詢字符串來傳參
2.form-data(完整表示為:multipart/form-data)
3.x-www-form-urlencoded
4.raw:可以上傳任意格式的文本,比如:text、JavaScript、json、html、xml
4.傳遞參數
1.傳遞單個參數
2.傳遞多個參數
3.傳遞對象
4.傳遞數組
5.傳遞集合
一、什麼是Spring Web MVC?
1.定義
Spring Web MVC是基於Servlet API構建的原始Web框架。是Spring框架中用於構建Web應用程序的模塊,基於模型-視圖-控制器(MVC)構架模式。簡稱Spring MVC。
- Servlet:Servlet是Java企業級開發中的一項核心技術,主要用於在Web服務器上處理客户端請求並生成的動態響應。Servlet不能獨立運行,把必須部署在支持Servlet規範放入容器內。
2.關於MVC
2.1什麼是MVC?
定義
MVC是一種軟件構架模式,廣泛應用於圖形用户界面(GUI)和Web應用程序的開發中國。他通過將應用程序的邏輯分為三個核心部分,實現了關注點分離,提高了代碼的可維護性、可擴展性和複用性。
MVC的核心組成:模型(Model)、視圖(View)、控制器(Controller),三者各司其職又相互協作。
步驟:
- 模型(Model):負責管理應用程序的數據和業務邏輯。是應用程序的“數據中心”。例如學生的家庭、號碼、住址等數據。
- 視圖(View):負責展示數據,是用户直接看到和交互的界面。例如我們平常經常看到的網頁哪些界面。同一個模型可以對應多個視圖。
- 控制器(Controller):作為模型和視圖之間的“橋樑”,負責協調兩者的交互,處理用户的核心業務邏輯。例如,“訂單控制器”,用户請求下單,調用商品,那麼商品模型的減少庫存,調用訂單模型創建訂單,最後跳轉訂單成功頁面。
- 用户通過視圖發起交互(例如在網頁點擊跳轉頁面)。
- 控制器接收用户請求。
- 控制器調用模型,進行數據處理(如驗證、存儲)。
- 模型處理完數據後,並將結果返回給控制器。
- 控制器選擇對應的視圖,並傳遞模型數據給視圖。
- 視圖展示模型數據,用户看到最終結果。
簡要概括:用户->視圖->控制器->模型->控制器->視圖->用户
二、學習Sring MVC
1.建立連接:將用户(瀏覽器)和Java連接起來,訪問一個地址可以調用Spring 程序
2.請求:用户請求一些參數,想辦法獲取這些參數。
3.響應:執行了業務邏輯,把程序執行結果返回給用户。
1.項目準備
創建項目
點擊New Project創建新項目
點擊Spring Initializr,沒有的話需要自己去下載,隨後點擊下一步
出現下面的界面
- 這裏注意一下,只能包含小寫字母、數字、連字符(-)、下劃線、句號(.),不能包含大寫字母。
點擊啓動項目
建立連接
我們創建一個類,實現用户與瀏覽器的交互
代碼如下
@RestController
public class hello {
@RequestMapping("/sayhello")
public String say(){
return "hello";
}
}
在瀏覽器輸入網址:127.0.0.1:8080/sayhello 查看結果
- 127.0.0.1:本地主機地址,表示定位到當前電腦。
- 8080:是Spring Boot應用的默認端口號。表示定位到“電腦上運行的Spring Boot程序”。
- /sayhello:請求路徑,接口地址。表示定位帶請求支援的位置。
- http://127.0.0.1:8080/sayhello: 表示的就是向本地計算機中的8080端口程序,獲取資源位置。
2.@RestController註解的介紹
@RestController註解就像給控制器類貼一個特殊標籤,告訴Spring框架:這個類裏的方法是傳給前端的返回數據。讓控制器裏的方法直接返回的東西當成響應內容發給前端,不用再走“找頁面”流程。
如果不控制器加@RestController註解會訪問頁面會怎麼樣?
結果如下:
@RestController的核心作用是“讓方法返回數據”
如果沒有@RestController,通常會用普通的@Controller註解,或者乾脆不加控制器註解,那麼類就不會被識別為控制器。
- 用@Controller,方法返回的是“頁面地址”
- 什麼控制器註解都不加,那麼類只是一個普通類,接口無法訪問。
3.@RequestMapping註解
定義:@RequestMapping是Spring框架中一個非常重要的註解,用於將特定的Http請求方法映射帶對應的處理方法。@RequestMapping(“/hello”)中裏面的/hello表示調用路徑裏面的方法的代碼。路徑不加/也可以,沒有影響,最好可以加一下。
@RequestMapping註解既可以用在類上,也可以用在方法上:
1.@RequestMapping只用在類上(相當於“只給文件夾起名,不給文件起名”)
@RestController
@RequestMapping("/sayhello")
public class hello {
public String say(){
return "hello";
}
}
相當於系統找到了文件夾,但不知道具體是哪個文件。就像你找一個住址,你只知道是哪個身份,但你並不知道是哪一個縣哪一個鄉,找不到具體是哪一個位置。
2.@RequestMapping只用在方法上(相當於“只給文件起名,不給文件夾起名”)
@RestController
public class hello {
@RequestMapping("/sayhello")
public String say(){
return "hello";
}
}
相當於系統不知道是哪個文件夾的文件,但是會搜索所有文件夾來查找這個文件,直接通過文件名來定位。
那麼如果出現相同的文件名呢?會怎麼樣,我們來試一下。
@RestController
@RequestMapping("/sayhello")
public class hello {
public String say1(){
return "hello1";
}
public String say2(){
return "hello2";
}
}
系統只知道文件名,但是有兩個相同的文件名,會出現路徑重複的問題,發生報錯現象。
3.@RequestMapping用在類和方法上(相當於給文件夾和文件都取名)
@RestController
@RequestMapping("/sayhello")
public class hello {
@RequestMapping("/hello1")
public String say1(){
return "hello1";
}
@RequestMapping("/hello2")
public String say2(){
return "hello2";
}
}
相當於給文件夾和文件都取名,可以進行具體的定位,不容易發生報錯。
查看RestMapping是否即支持Post和Get
@RestController
@RequestMapping("/number")
public class Rest {
//即支持post,又支持get
@RequestMapping("/1")
public Integer num1(){
return 1;
}
}
另一種寫法
@RequestMapping(value = "6",method = {RequestMethod.GET,RequestMethod.POST})
public Integer num6(){
return 6;
}
- RestMapping即支持Post和Get
如果我只要只能用get或者Post其中一種呢?應該怎麼寫
只用get
// 只支持get
//寫法1
@RequestMapping(value="/2",method = RequestMethod.GET)
public Integer num2(){
return 2;
}
//寫法2
@GetMapping("/3")
public Integer num3(){
return 3;
}
只請求Post
//只請求Post
//寫法1
@RequestMapping(value="/4",method = RequestMethod.POST)
public Integer num4(){
return 4;
}
//寫法2
@PostMapping("/5")
public Integer num5(){
return 5;
}
三、Postman
1.什麼是Postman?
Poatman是一筐廣泛用於API開發、測試和調試的工具,被開發者、測試工具等廣泛使用,其核心價值體現在高效、便捷的處理API相關工作。
Post是API開發調試的高效工具,核心優勢:
- 調試簡單:圖形化界面,填好參數就能發送請求,不用寫代碼,響應結果直觀展示。
- 功能全面:支持各種HTTP請求方法和數據格式。
- 協作方便:可將API分組管理,共享給團隊;多環境一鍵切換,不用重複配置。
- 能自動化測試:可寫腳本驗證響應,批量運行測試並生成報告,還能集成開發流程中自動檢測問題。
- 實用小工具:保存請求歷史、自動生成API文檔等,提升效率。
2.關於API
API(Application Programming Interface,應用程序編程接口)是不同軟件之間進行交互的一套規則、協議和工具的集合,他規定了一方如何向另一方請求服務或數據,以及另一方如何響應。API就像兩個軟件之間的“橋樑”或“服務員”,讓他們能按照統一的方式溝通,而無需瞭解對方的內部工作原理。
就像我們去網購的時候,我們直接對自己想要的東西直接下單購買即可,不用瞭解其內部具體流程是怎麼樣執行的,最後他都會把你要的東西給到你。這裏“下單的流程”就是API規則。
界面介紹
3.傳參介紹
1.普通傳參:通過查詢字符串來傳參
2.form-data(完整表示為:multipart/form-data)
表單提交數據,在form標籤中加上enctyped=“multipart/form-data”,通常用於提交圖片/文件。對應Content-type:multipart/form-data
3.x-www-form-urlencoded
form表單:對應Content-type:application/x-www-form-urlencoded
4.raw:可以上傳任意格式的文本,比如:text、JavaScript、json、html、xml
4.傳遞參數
1.傳遞單個參數
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/request")
public class RequestController {
@RequestMapping("/1")
public String method(String string){
return "接收單個參數:"+string;
}
}
- 接收時,參數名要一致,否則無法接收到參數
- 如果接受的參數基本類型不對應,會發生報錯現象
@RequestMapping("/2") public String method2(Integer i){ return "接收單個參數:"+i; }
基本類型和引用類型傳參的區別
@RequestMapping("/2")
public String method2(Integer i){
return "接收單個參數:"+i;
}
@RequestMapping("/3")
public String method3(int j){
return "接收單個參數:"+j;
}
- 引用類型:傳參時,若不傳值,會賦值為null,不會發生報錯現象
- 基本類型:傳參時,若不傳值,不會發生報錯現象
2.傳遞多個參數
@RequestMapping("/4")
public String method3(String name,Integer age){
return "接收多個參數: "+"姓名:"+name+" 年齡:"+age;
}
3.傳遞對象
@RequestMapping("/5")
public String method3(User user){
return "接收對象參數:"+user.toString();
}
@RestController
@RequestMapping("/User")
public class User {
private String name;
private int password;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password=" + password +
", age=" + age +
'}';
}
}
後端參數重命名:@RequestParam
如果前後端參數命名不一致,可能會出接收不到的情況,這時候我們可以使用@RequestParam來重命名前後端參數。
//將其重命名為str
@RequestMapping("/6")
public String method6(@RequestParam("str")String s){
return "接收參數:"+s;
}
- 使用@RequestParam重命名時參數就成了必傳參數,否則將會報錯
- 使用@RequestParam時,就不能再使用原來的前後端的參數名
如果真的不想要傳參數怎麼辦?
看一下@RequestParam的源碼
其默認參數為true,所以一定要傳參數,我們將其改為false就好了
@RequestMapping("/7")
public String method7(@RequestParam(value = "str",required = false)String s){
return "接收參數:"+s;
}
4.傳遞數組
@RequestMapping("/8")
public String method8(String[] s){
return Arrays.toString(s);
}
5.傳遞集合
傳遞集合需要使用@RequestParam用於接收單個請求參數。如果要接收List類型,需要顯示開啓“允許多值”模式,否則Spring無法解析
@RequestMapping("/9")
public List<Integer> method8(@RequestParam List<Integer> num){
return num;
}