目錄

一、什麼是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):作為模型和視圖之間的“橋樑”,負責協調兩者的交互,處理用户的核心業務邏輯。例如,“訂單控制器”,用户請求下單,調用商品,那麼商品模型的減少庫存,調用訂單模型創建訂單,最後跳轉訂單成功頁面。

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc

  • 用户通過視圖發起交互(例如在網頁點擊跳轉頁面)。
  • 控制器接收用户請求。
  • 控制器調用模型,進行數據處理(如驗證、存儲)。
  • 模型處理完數據後,並將結果返回給控制器。
  • 控制器選擇對應的視圖,並傳遞模型數據給視圖。
  • 視圖展示模型數據,用户看到最終結果。

簡要概括:用户->視圖->控制器->模型->控制器->視圖->用户

二、學習Sring MVC

1.建立連接:將用户(瀏覽器)和Java連接起來,訪問一個地址可以調用Spring 程序

2.請求:用户請求一些參數,想辦法獲取這些參數。

3.響應:執行了業務邏輯,把程序執行結果返回給用户。

1.項目準備

創建項目

點擊New Project創建新項目

SpringMVC由淺入深實用教程-初識SpringMVC_#spring_02

點擊Spring Initializr,沒有的話需要自己去下載,隨後點擊下一步

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_03

出現下面的界面

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_04

  • 這裏注意一下,只能包含小寫字母、數字、連字符(-)、下劃線、句號(.),不能包含大寫字母。

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_05

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_06

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_07

SpringMVC由淺入深實用教程-初識SpringMVC_API_08

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_09

SpringMVC由淺入深實用教程-初識SpringMVC_#spring_10

點擊啓動項目

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_11

建立連接

我們創建一個類,實現用户與瀏覽器的交互

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_12

代碼如下

@RestController
public class hello {
    @RequestMapping("/sayhello")
    public String say(){
        return "hello";
    }
}

在瀏覽器輸入網址:127.0.0.1:8080/sayhello 查看結果

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_13

  • 127.0.0.1:本地主機地址,表示定位到當前電腦。
  • 8080:是Spring Boot應用的默認端口號。表示定位到“電腦上運行的Spring Boot程序”。
  • /sayhello:請求路徑,接口地址。表示定位帶請求支援的位置。
  • http://127.0.0.1:8080/sayhello: 表示的就是向本地計算機中的8080端口程序,獲取資源位置。

2.@RestController註解的介紹

@RestController註解就像給控制器類貼一個特殊標籤,告訴Spring框架:這個類裏的方法是傳給前端的返回數據。讓控制器裏的方法直接返回的東西當成響應內容發給前端,不用再走“找頁面”流程。

如果不控制器加@RestController註解會訪問頁面會怎麼樣?

結果如下:

SpringMVC由淺入深實用教程-初識SpringMVC_API_14

@RestController的核心作用是“讓方法返回數據”

如果沒有@RestController,通常會用普通的@Controller註解,或者乾脆不加控制器註解,那麼類就不會被識別為控制器。

  • 用@Controller,方法返回的是“頁面地址”

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_15

  • 什麼控制器註解都不加,那麼類只是一個普通類,接口無法訪問。

3.@RequestMapping註解

定義:@RequestMapping是Spring框架中一個非常重要的註解,用於將特定的Http請求方法映射帶對應的處理方法。@RequestMapping(“/hello”)中裏面的/hello表示調用路徑裏面的方法的代碼。路徑不加/也可以,沒有影響,最好可以加一下。

@RequestMapping註解既可以用在類上,也可以用在方法上:

1.@RequestMapping只用在類上(相當於“只給文件夾起名,不給文件起名”)

@RestController
@RequestMapping("/sayhello")
public class hello {
    public String say(){
        return "hello";
    }
}

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_16

相當於系統找到了文件夾,但不知道具體是哪個文件。就像你找一個住址,你只知道是哪個身份,但你並不知道是哪一個縣哪一個鄉,找不到具體是哪一個位置。

2.@RequestMapping只用在方法上(相當於“只給文件起名,不給文件夾起名”)

@RestController
public class hello {
    @RequestMapping("/sayhello")
    public String say(){
        return "hello";
    }
}

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_17

相當於系統不知道是哪個文件夾的文件,但是會搜索所有文件夾來查找這個文件,直接通過文件名來定位。

那麼如果出現相同的文件名呢?會怎麼樣,我們來試一下。

@RestController
@RequestMapping("/sayhello")
public class hello {
    public String say1(){
        return "hello1";
    }
    public String say2(){
        return "hello2";
    }
}

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_16

系統只知道文件名,但是有兩個相同的文件名,會出現路徑重複的問題,發生報錯現象。

3.@RequestMapping用在類和方法上(相當於給文件夾和文件都取名)

@RestController
@RequestMapping("/sayhello")
public class hello {
    @RequestMapping("/hello1")
    public String say1(){
        return "hello1";
    }
    @RequestMapping("/hello2")
    public String say2(){
        return "hello2";
    }
}

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_19

相當於給文件夾和文件都取名,可以進行具體的定位,不容易發生報錯。

查看RestMapping是否即支持Post和Get

@RestController
@RequestMapping("/number")
public class Rest {
    //即支持post,又支持get
    @RequestMapping("/1")
    public Integer num1(){
        return 1;
    }
}

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_20

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_21

另一種寫法

@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;
    }

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_22

只請求Post

//只請求Post
    //寫法1
    @RequestMapping(value="/4",method = RequestMethod.POST)
    public Integer num4(){
        return 4;
    }
    //寫法2
    @PostMapping("/5")
    public Integer num5(){
        return 5;
    }

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_23

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_24

三、Postman

1.什麼是Postman?

Poatman是一筐廣泛用於API開發、測試和調試的工具,被開發者、測試工具等廣泛使用,其核心價值體現在高效、便捷的處理API相關工作。

Post是API開發調試的高效工具,核心優勢:

  • 調試簡單:圖形化界面,填好參數就能發送請求,不用寫代碼,響應結果直觀展示。
  • 功能全面:支持各種HTTP請求方法和數據格式。
  • 協作方便:可將API分組管理,共享給團隊;多環境一鍵切換,不用重複配置。
  • 能自動化測試:可寫腳本驗證響應,批量運行測試並生成報告,還能集成開發流程中自動檢測問題。
  • 實用小工具:保存請求歷史、自動生成API文檔等,提升效率。

2.關於API

API(Application Programming Interface,應用程序編程接口)是不同軟件之間進行交互的一套規則、協議和工具的集合,他規定了一方如何向另一方請求服務或數據,以及另一方如何響應。API就像兩個軟件之間的“橋樑”或“服務員”,讓他們能按照統一的方式溝通,而無需瞭解對方的內部工作原理。

就像我們去網購的時候,我們直接對自己想要的東西直接下單購買即可,不用瞭解其內部具體流程是怎麼樣執行的,最後他都會把你要的東西給到你。這裏“下單的流程”就是API規則。

界面介紹

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_25

3.傳參介紹

1.普通傳參:通過查詢字符串來傳參

SpringMVC由淺入深實用教程-初識SpringMVC_API_26

2.form-data(完整表示為:multipart/form-data)

表單提交數據,在form標籤中加上enctyped=“multipart/form-data”,通常用於提交圖片/文件。對應Content-type:multipart/form-data

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_27

3.x-www-form-urlencoded

form表單:對應Content-type:application/x-www-form-urlencoded

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_28

4.raw:可以上傳任意格式的文本,比如:text、JavaScript、json、html、xml

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_29

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;
        }
}

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_30

  • 接收時,參數名要一致,否則無法接收到參數

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_31

  • 如果接受的參數基本類型不對應,會發生報錯現象

@RequestMapping("/2") public String method2(Integer i){ return "接收單個參數:"+i; }

SpringMVC由淺入深實用教程-初識SpringMVC_API_32

基本類型和引用類型傳參的區別

@RequestMapping("/2")
    public String method2(Integer i){
        return "接收單個參數:"+i;
    }

    @RequestMapping("/3")
    public String method3(int j){
        return "接收單個參數:"+j;
    }

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_33

  • 引用類型:傳參時,若不傳值,會賦值為null,不會發生報錯現象
  • 基本類型:傳參時,若不傳值,不會發生報錯現象

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_34

2.傳遞多個參數

@RequestMapping("/4")
    public String method3(String name,Integer age){
        return "接收多個參數: "+"姓名:"+name+" 年齡:"+age;
    }

SpringMVC由淺入深實用教程-初識SpringMVC_API_35

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 +
                '}';
    }
}

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_36

後端參數重命名:@RequestParam

如果前後端參數命名不一致,可能會出接收不到的情況,這時候我們可以使用@RequestParam來重命名前後端參數。

//將其重命名為str
@RequestMapping("/6")
    public String method6(@RequestParam("str")String s){
        return "接收參數:"+s;
    }

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_37

SpringMVC由淺入深實用教程-初識SpringMVC_API_38

  • 使用@RequestParam重命名時參數就成了必傳參數,否則將會報錯
  • 使用@RequestParam時,就不能再使用原來的前後端的參數名

SpringMVC由淺入深實用教程-初識SpringMVC_#mvc_39

如果真的不想要傳參數怎麼辦?
看一下@RequestParam的源碼

SpringMVC由淺入深實用教程-初識SpringMVC_MVC_40

其默認參數為true,所以一定要傳參數,我們將其改為false就好了

@RequestMapping("/7")
    public String method7(@RequestParam(value = "str",required = false)String s){
        return "接收參數:"+s;
    }

SpringMVC由淺入深實用教程-初識SpringMVC_API_41

4.傳遞數組

@RequestMapping("/8")
    public String method8(String[] s){
        return Arrays.toString(s);
    }

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_42

5.傳遞集合

傳遞集合需要使用@RequestParam用於接收單個請求參數。如果要接收List類型,需要顯示開啓“允許多值”模式,否則Spring無法解析

@RequestMapping("/9")
    public List<Integer> method8(@RequestParam List<Integer> num){
        return num;
    }

SpringMVC由淺入深實用教程-初識SpringMVC_#前端_43