【JavaWeb】SpringBoot基礎

hudad發表於2024-06-16
  1. SpringBootWeb入門

  2. HTTP協議

  3. Web伺服器-Tomcat

前言

Spring的官網(https://spring.io)。Spring的官方提供很多開源的專案,我們可以點選上面的projects,看到spring家族旗下的專案。

Spring發展到今天已經形成了一種開發生態圈,Spring提供了若干個子專案,每個專案用於完成特定的功能。而我們在專案開發時,一般會偏向於選擇這一套spring家族的技術,來解決對應領域的問題,那我們稱這一套技術為spring全家桶

而Spring家族旗下這麼多的技術,最基礎、最核心的是 SpringFramework。其他的spring家族的技術,都是基於SpringFramework的,SpringFramework中提供很多實用功能,如:依賴注入、事務管理、web開發支援、資料訪問、訊息服務等等。

而如果我們在專案中,直接基於SpringFramework進行開發,存在兩個問題:配置繁瑣、入門難度大。

所以基於此呢,spring官方推薦我們從另外一個專案開始學習,那就是目前最火爆的SpringBoot。

透過springboot就可以快速的幫我們構建應用程式,所以springboot呢,最大的特點有兩個 :

  • 簡化配置
  • 快速開發

Spring Boot 可以幫助我們非常快速的構建應用程式、簡化開發、提高效率 。

接下來,我們就直接透過一個SpringBoot的web入門程式,讓大家快速感受一下,基於SpringBoot進行Web開發的便捷性。

1. SpringBootWeb快速入門

1.1 需求

需求:基於SpringBoot的方式開發一個web應用,瀏覽器發起請求/hello後,給瀏覽器返回字串 “Hello World ~”。

1.2 開發步驟

第1步:建立SpringBoot工程專案

第2步:定義HelloController類,新增方法hello,並新增註解

第3步:測試執行

1.2.1 建立SpringBoot工程(需要聯網)

基於Spring官方骨架,建立SpringBoot工程。

基本資訊描述完畢之後,勾選web開發相關依賴。

點選Finish之後,就會聯網建立這個SpringBoot工程,建立好之後,結構如下:

  • 注意:在聯網建立過程中,會下載相關資源(請耐心等待)

1.2.2 定義請求處理類

在com.itheima這個包下建立一個子包controller

然後在controller包下新建一個類:HelloController

package com.itheima.controller;
import org.springframework.web.bind.annotation.*;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        System.out.println("Hello World ~");
        return "Hello World ~";
    }
    
}    

1.2.3 執行測試

執行SpringBoot自動生成的引導類

開啟瀏覽器,輸入 http://localhost:8080/hello

1.3 Web分析

瀏覽器:

  • 輸入網址:http://192.168.100.11:8080/hello

    • 透過IP地址192.168.100.11定位到網路上的一臺計算機

      我們之前在瀏覽器中輸入的localhost,就是127.0.0.1(本機)

    • 透過埠號8080找到計算機上執行的程式

      localhost:8080 , 意思是在本地計算機中找到正在執行的8080埠的程式

    • /hello是請求資源位置

      • 資源:對計算機而言資源就是資料
        • web資源:透過網路可以訪問到的資源(通常是指存放在伺服器上的資料)

      localhost:8080/hello ,意思是向本地計算機中的8080埠程式,獲取資源位置是/hello的資料

      • 8080埠程式,在伺服器找/hello位置的資源資料,發給瀏覽器

伺服器:(可以理解為ServerSocket)

  • 接收到瀏覽器傳送的資訊(如:/hello)
  • 在伺服器上找到/hello的資源
  • 把資源傳送給瀏覽器

我們在JavaSE階段學習網路程式設計時,有講過網路三要素:

  • IP :網路中計算機的唯一標識
  • 埠 :計算機中執行程式的唯一標識
  • 協議 :網路中計算機之間互動的規則

問題:瀏覽器和伺服器兩端進行資料互動,使用什麼協議?

答案:http協議

2. HTTP協議

2.1 HTTP-概述

2.1.1 介紹

HTTP:Hyper Text Transfer Protocol(超文字傳輸協議),規定了瀏覽器與伺服器之間資料傳輸的規則。

  • http是網際網路上應用最為廣泛的一種網路協議
  • http協議要求:瀏覽器在向伺服器傳送請求資料時,或是伺服器在向瀏覽器傳送響應資料時,都必須按照固定的格式進行資料傳輸

如果想知道http協議的資料傳輸格式有哪些,可以開啟瀏覽器,點選F12開啟開發者工具,點選Network來檢視

瀏覽器向伺服器進行請求時:

  • 伺服器按照固定的格式進行解析

伺服器向瀏覽器進行響應時:

  • 瀏覽器按照固定的格式進行解析

所以,我們學習HTTP主要就是學習請求和響應資料的具體格式內容。

2.2.2 特點

我們剛才初步認識了HTTP協議,那麼我們在看看HTTP協議有哪些特點:

  • **基於TCP協議: ** 面向連線,安全

    TCP是一種面向連線的(建立連線之前是需要經過三次握手)、可靠的、基於位元組流的傳輸層通訊協議,在資料傳輸方面更安全

  • 基於請求-響應模型: 一次請求對應一次響應(先請求後響應)

    請求和響應是一一對應關係,沒有請求,就沒有響應

  • HTTP協議是無狀態協議: 對於資料沒有記憶能力。每次請求-響應都是獨立的

    無狀態指的是客戶端傳送HTTP請求給服務端之後,服務端根據請求響應資料,響應完後,不會記錄任何資訊。

    • 缺點: 多次請求間不能共享資料
    • 優點: 速度快

    請求之間無法共享資料會引發的問題:

    • 如:京東購物。加入購物車和去購物車結算是兩次請求
    • 由於HTTP協議的無狀態特性,加入購物車請求響應結束後,並未記錄加入購物車是何商品
    • 發起去購物車結算的請求後,因為無法獲取哪些商品加入了購物車,會導致此次請求無法正確展示資料

    具體使用的時候,我們發現京東是可以正常展示資料的,原因是Java早已考慮到這個問題,並提出了使用會話技術(Cookie、Session)來解決這個問題。具體如何來做,我們後面課程中會講到。

    剛才提到HTTP協議是規定了請求和響應資料的格式,那具體的格式是什麼呢?

2.2 HTTP-請求協議

瀏覽器和伺服器是按照HTTP協議進行資料通訊的。

HTTP協議又分為:請求協議和響應協議

  • 請求協議:瀏覽器將資料以請求格式傳送到伺服器
    • 包括:請求行請求頭請求體
  • 響應協議:伺服器將資料以響應格式返回給瀏覽器
    • 包括:響應行響應頭響應體

在HTTP1.1版本中,瀏覽器訪問伺服器的幾種方式:

請求方式 請求說明
GET 獲取資源。
向特定的資源發出請求。例:http://www.baidu.com/s?wd=itheima
POST 傳輸實體主體。
向指定資源提交資料進行處理請求(例:上傳檔案),資料被包含在請求體中。
OPTIONS 返回伺服器針對特定資源所支援的HTTP請求方式。
因為並不是所有的伺服器都支援規定的方法,為了安全有些伺服器可能會禁止掉一些方法,例如:DELETE、PUT等。那麼OPTIONS就是用來詢問伺服器支援的方法。
HEAD 獲得報文首部。
HEAD方法類似GET方法,但是不同的是HEAD方法不要求返回資料。通常用於確認URI的有效性及資源更新時間等。
PUT 傳輸檔案。
PUT方法用來傳輸檔案。類似FTP協議,檔案內容包含在請求報文的實體中,然後請求儲存到URL指定的伺服器位置。
DELETE 刪除檔案。
請求伺服器刪除Request-URI所標識的資源
TRACE 追蹤路徑。
回顯伺服器收到的請求,主要用於測試或診斷
CONNECT 要求用隧道協議連線代理。
HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器

在我們實際應用中常用的也就是 :GET、POST

GET方式的請求協議:

  • 請求行 :HTTP請求中的第一行資料。由:請求方式資源路徑協議/版本組成(之間使用空格分隔)

    • 請求方式:GET
    • 資源路徑:/brand/findAll?name=OPPO&status=1
      • 請求路徑:/brand/findAll
      • 請求引數:name=OPPO&status=1
        • 請求引數是以key=value形式出現
        • 多個請求引數之間使用&連線
      • 請求路徑和請求引數之間使用?連線
    • 協議/版本:HTTP/1.1
  • 請求頭 :第二行開始,上圖黃色部分內容就是請求頭。格式為key: value形式

    • http是個無狀態的協議,所以在請求頭設定瀏覽器的一些自身資訊和想要響應的形式。這樣伺服器在收到資訊後,就可以知道是誰,想幹什麼了

    常見的HTTP請求頭有:

    Host: 表示請求的主機名
    
    User-Agent: 瀏覽器版本。 例如:Chrome瀏覽器的標識類似Mozilla/5.0 ...Chrome/79 ,IE瀏覽器的標識類似Mozilla/5.0 (Windows NT ...)like Gecko
    
    Accept:表示瀏覽器能接收的資源型別,如text/*,image/*或者*/*表示所有;
    
    Accept-Language:表示瀏覽器偏好的語言,伺服器可以據此返回不同語言的網頁;
    
    Accept-Encoding:表示瀏覽器可以支援的壓縮型別,例如gzip, deflate等。
    
    Content-Type:請求主體的資料型別
    
    Content-Length:資料主體的大小(單位:位元組)
    

舉例說明:服務端可以根據請求頭中的內容來獲取客戶端的相關資訊,有了這些資訊服務端就可以處理不同的業務需求。

比如:

  • 不同瀏覽器解析HTML和CSS標籤的結果會有不一致,所以就會導致相同的程式碼在不同的瀏覽器會出現不同的效果
  • 服務端根據客戶端請求頭中的資料獲取到客戶端的瀏覽器型別,就可以根據不同的瀏覽器設定不同的程式碼來達到一致的效果(這就是我們常說的瀏覽器相容問題)
  • 請求體 :儲存請求引數
    • GET請求的請求引數在請求行中,故不需要設定請求體

POST方式的請求協議:

  • 請求行(以上圖中紅色部分):包含請求方式、資源路徑、協議/版本
    • 請求方式:POST
    • 資源路徑:/brand
    • 協議/版本:HTTP/1.1
  • 請求頭(以上圖中黃色部分)
  • 請求體(以上圖中綠色部分) :儲存請求引數
    • 請求體和請求頭之間是有一個空行隔開(作用:用於標記請求頭結束)

GET請求和POST請求的區別:

區別方式 GET請求 POST請求
請求引數 請求引數在請求行中。
例:/brand/findAll?name=OPPO&status=1
請求引數在請求體中
請求引數長度 請求引數長度有限制(瀏覽器不同限制也不同) 請求引數長度沒有限制
安全性 安全性低。原因:請求引數暴露在瀏覽器位址列中。 安全性相對高

2.3 HTTP-響應協議

2.3.1 格式介紹

與HTTP的請求一樣,HTTP響應的資料也分為3部分:響應行響應頭響應體

  • 響應行(以上圖中紅色部分):響應資料的第一行。響應行由協議及版本響應狀態碼狀態碼描述組成

    • 協議/版本:HTTP/1.1
    • 響應狀態碼:200
    • 狀態碼描述:OK
  • 響應頭(以上圖中黃色部分):響應資料的第二行開始。格式為key:value形式

    • http是個無狀態的協議,所以可以在請求頭和響應頭中設定一些資訊和想要執行的動作,這樣,對方在收到資訊後,就可以知道你是誰,你想幹什麼

    常見的HTTP響應頭有:

    Content-Type:表示該響應內容的型別,例如text/html,image/jpeg ;
    
    Content-Length:表示該響應內容的長度(位元組數);
    
    Content-Encoding:表示該響應壓縮演算法,例如gzip ;
    
    Cache-Control:指示客戶端應如何快取,例如max-age=300表示可以最多快取300秒 ;
    
    Set-Cookie: 告訴瀏覽器為當前頁面所在的域設定cookie ;
    
  • 響應體(以上圖中綠色部分): 響應資料的最後一部分。儲存響應的資料
    • 響應體和響應頭之間有一個空行隔開(作用:用於標記響應頭結束)

2.3.2 響應狀態碼

狀態碼分類 說明
1xx 響應中 --- 臨時狀態碼。表示請求已經接受,告訴客戶端應該繼續請求或者如果已經完成則忽略
2xx 成功 --- 表示請求已經被成功接收,處理已完成
3xx 重定向 --- 重定向到其它地方,讓客戶端再發起一個請求以完成整個處理
4xx 客戶端錯誤 --- 處理發生錯誤,責任在客戶端,如:客戶端的請求一個不存在的資源,客戶端未被授權,禁止訪問等
5xx 伺服器端錯誤 --- 處理發生錯誤,責任在服務端,如:服務端丟擲異常,路由出錯,HTTP版本不支援等

參考: 資料/SpringbootWeb/響應狀態碼.md

關於響應狀態碼,我們先主要認識三個狀態碼,其餘的等後期用到了再去掌握:

  • 200 ok 客戶端請求成功
  • 404 Not Found 請求資源不存在
  • 500 Internal Server Error 服務端發生不可預期的錯誤

2.4 HTTP-協議解析

將資料中準備好的Demo工程,匯入到我們的IDEA中,有一個Server.java類,這裡面就是自定義的一個伺服器程式碼,主要使用到的是ServerSocketSocket

說明:以下程式碼大家不需要自己寫,我們主要是透過程式碼,讓大家瞭解到伺服器針對HTTP協議的解析機制

package com.itheima;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

/*
 * 自定義web伺服器
 */
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(8080); // 監聽指定埠
        System.out.println("server is running...");

        while (true){
            Socket sock = ss.accept();
            System.out.println("connected from " + sock.getRemoteSocketAddress());
            Thread t = new Handler(sock);
            t.start();
        }
    }
}

class Handler extends Thread {
    Socket sock;

    public Handler(Socket sock) {
        this.sock = sock;
    }

    public void run() {
        try (InputStream input = this.sock.getInputStream();
             OutputStream output = this.sock.getOutputStream()) {
                handle(input, output);
        } catch (Exception e) {
            try {
                this.sock.close();
            } catch (IOException ioe) {
            }
            System.out.println("client disconnected.");
        }
    }

    private void handle(InputStream input, OutputStream output) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
        // 讀取HTTP請求:
        boolean requestOk = false;
        String first = reader.readLine();
        if (first.startsWith("GET / HTTP/1.")) {
            requestOk = true;
        }
        for (;;) {
            String header = reader.readLine();
            if (header.isEmpty()) { // 讀取到空行時, HTTP Header讀取完畢
                break;
            }
            System.out.println(header);
        }
        System.out.println(requestOk ? "Response OK" : "Response Error");

        if (!requestOk) {// 傳送錯誤響應:
            writer.write("HTTP/1.0 404 Not Found\r\n");
            writer.write("Content-Length: 0\r\n");
            writer.write("\r\n");
            writer.flush();
        } else {// 傳送成功響應:
            //讀取html檔案,轉換為字串
            InputStream is = Server.class.getClassLoader().getResourceAsStream("html/a.html");
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder data = new StringBuilder();
            String line = null;
            while ((line = br.readLine()) != null){
                data.append(line);
            }
            br.close();
            int length = data.toString().getBytes(StandardCharsets.UTF_8).length;

            writer.write("HTTP/1.1 200 OK\r\n");
            writer.write("Connection: keep-alive\r\n");
            writer.write("Content-Type: text/html\r\n");
            writer.write("Content-Length: " + length + "\r\n");
            writer.write("\r\n"); // 空行標識Header和Body的分隔
            writer.write(data.toString());
            writer.flush();
        }
    }
}

啟動ServerSocket程式:

瀏覽器輸入:http://localhost:8080 就會訪問到ServerSocket程式

  • ServerSocket程式,會讀取伺服器上html/a.html檔案,並把檔案資料傳送給瀏覽器
  • 瀏覽器接收到a.html檔案中的資料後進行解析,顯示以下內容

現在大家知道了伺服器是可以使用java完成編寫,是可以接受頁面傳送的請求和響應資料給前端瀏覽器的,而在開發中真正用到的Web伺服器,我們不會自己寫的,都是使用目前比較流行的web伺服器。如:Tomcat

3. WEB伺服器-Tomcat

3.1 簡介

3.1.1 伺服器概述

伺服器硬體

  • 指的也是計算機,只不過伺服器要比我們日常使用的計算機大很多。

伺服器,也稱伺服器。是提供計算服務的裝置。由於伺服器需要響應服務請求,並進行處理,因此一般來說伺服器應具備承擔服務並且保障服務的能力。

伺服器的構成包括處理器、硬碟、記憶體、系統匯流排等,和通用的計算機架構類似,但是由於需要提供高可靠的服務,因此在處理能力、穩定性、可靠性、安全性、可擴充套件性、可管理性等方面要求較高。

在網路環境下,根據伺服器提供的服務型別不同,可分為:檔案伺服器,資料庫伺服器,應用程式伺服器,WEB伺服器等。

伺服器只是一臺裝置,必須安裝伺服器軟體才能提供相應的服務。

伺服器軟體

伺服器軟體:基於ServerSocket編寫的程式

  • 伺服器軟體本質是一個執行在伺服器裝置上的應用程式
  • 能夠接收客戶端請求,並根據請求給客戶端響應資料

3.1.2 Web伺服器

Web伺服器是一個應用程式(軟體),對HTTP協議的操作進行封裝,使得程式設計師不必直接對協議進行操作(不用程式設計師自己寫程式碼去解析http協議規則),讓Web開發更加便捷。主要功能是"提供網上資訊瀏覽服務"。

Web伺服器是安裝在伺服器端的一款軟體,將來我們把自己寫的Web專案部署到Tomcat伺服器軟體中,當Web伺服器軟體啟動後,部署在Web伺服器軟體中的頁面就可以直接透過瀏覽器來訪問了。

Web伺服器軟體使用步驟

  • 準備靜態資源
  • 下載安裝Web伺服器軟體
  • 將靜態資源部署到Web伺服器上
  • 啟動Web伺服器使用瀏覽器訪問對應的資源

第1步:準備靜態資源

  • 在提供的資料中找到靜態資原始檔

第2步:下載安裝Web伺服器軟體

第3步:將靜態資源部署到Web伺服器上

第4步:啟動Web伺服器使用瀏覽器訪問對應的資源

瀏覽器輸入:http://localhost:8080/demo/index.html

上述內容在演示的時候,使用的是Apache下的Tomcat軟體,至於Tomcat軟體如何使用,後面會詳細的講到。而對於Web伺服器來說,實現的方案有很多,Tomcat只是其中的一種,而除了Tomcat以外,還有很多優秀的Web伺服器,比如:

Tomcat就是一款軟體,我們主要是以學習如何去使用為主。具體我們會從以下這些方向去學習:

  1. 簡介:初步認識下Tomcat

  2. 基本使用: 安裝、解除安裝、啟動、關閉、配置和專案部署,這些都是對Tomcat的基本操作

  3. IDEA中如何建立Maven Web專案

  4. IDEA中如何使用Tomcat,後面這兩個都是我們以後開發經常會用到的方式

首選我們來認識下Tomcat。

3.1.3 Tomcat

Tomcat伺服器軟體是一個免費的開源的web應用伺服器。是Apache軟體基金會的一個核心專案。由Apache,Sun和其他一些公司及個人共同開發而成。

由於Tomcat只支援Servlet/JSP少量JavaEE規範,所以是一個開源免費的輕量級Web伺服器。

JavaEE規範: JavaEE => Java Enterprise Edition(Java企業版)

avaEE規範就是指Java企業級開發的技術規範總和。包含13項技術規範:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF

因為Tomcat支援Servlet/JSP規範,所以Tomcat也被稱為Web容器、Servlet容器。JavaWeb程式需要依賴Tomcat才能執行。

Tomcat的官網: https://tomcat.apache.org/

3.2 基本使用

3.2.1 下載

直接從官方網站下載:https://tomcat.apache.org/download-90.cgi

Tomcat軟體型別說明:

  • tar.gz檔案,是linux和mac作業系統下的壓縮版本
  • zip檔案,是window作業系統下壓縮版本(我們選擇zip檔案)

大家可以自行下載,也可以直接使用資料中已經下載好的資源,

Tomcat的軟體程式 :/資料/SpringbootWeb/apache-tomcat-9.0.27-windows-x64.zip

3.2.2 安裝與解除安裝

安裝: Tomcat是綠色版,直接解壓即安裝

在E盤的develop目錄下,將apache-tomcat-9.0.27-windows-x64.zip進行解壓縮,會得到一個apache-tomcat-9.0.27的目錄,Tomcat就已經安裝成功。

注意,Tomcat在解壓縮的時候,解壓所在的目錄可以任意,但最好解壓到一個不包含中文和空格的目錄,因為後期在部署專案的時候,如果路徑有中文或者空格可能會導致程式部署失敗。

開啟apache-tomcat-9.0.27目錄就能看到如下目錄結構,每個目錄中包含的內容需要認識下

bin:目錄下有兩類檔案,一種是以.bat結尾的,是Windows系統的可執行檔案,一種是以.sh結尾的,是Linux系統的可執行檔案。

webapps:就是以後專案部署的目錄

解除安裝:解除安裝比較簡單,可以直接刪除目錄即可

3.2.3 啟動與關閉

啟動Tomcat

  • 雙擊tomcat解壓目錄/bin/startup.bat檔案即可啟動tomcat

注意: tomcat伺服器啟動後,黑視窗不會關閉,只要黑視窗不關閉,就證明tomcat伺服器正在執行

Tomcat的預設埠為8080,所以在瀏覽器的位址列輸入:http://127.0.0.1:8080 即可訪問tomcat伺服器

127.0.0.1 也可以使用localhost代替。如:http://localhost:8080

  • 能看到以上圖片中Apache Tomcat的內容就說明Tomcat已經啟動成功

注意事項 :Tomcat啟動的過程中,遇到控制檯有中文亂碼時,可以通常修改conf/logging.prooperties檔案解決

關閉: 關閉有三種方式

1、強制關閉:直接x掉Tomcat視窗(不建議)

2、正常關閉:bin\shutdown.bat

3、正常關閉:在Tomcat啟動視窗中按下 Ctrl+C

  • 說明:如果按下Ctrl+C沒有反映,可以多按幾次

3.2.4 常見問題

問題1:Tomcat啟動時,視窗一閃而過

  • 檢查JAVA_HOME環境變數是否正確配置

問題2:埠號衝突

  • 發生問題的原因:Tomcat使用的埠被佔用了。

  • 解決方案:換Tomcat埠號

    • 要想修改Tomcat啟動的埠號,需要修改 conf/server.xml檔案

注: HTTP協議預設埠號為80,如果將Tomcat埠號改為80,則將來訪問Tomcat時,將不用輸入埠號。

3.3 入門程式解析

關於web開發的基礎知識,我們可以告一段落了。下面呢,我們在基於今天的核心技術點SpringBoot快速入門案例進行分析。

3.3.1 Spring官方骨架

之前我們建立的SpringBoot入門案例,是基於Spring官方提供的骨架實現的。

Spring官方骨架,可以理解為Spring官方為程式設計師提供一個搭建專案的模板。

我們可以透過訪問:https://start.spring.io/ ,進入到官方骨架頁面

Spring官方生成的SpringBoot專案,怎麼使用呢?

  • 解壓縮後,就會得到一個SpringBoot專案工程


)

開啟pom.xml檔案,我們可以看到springboot專案中引入了web依賴和test依賴

結論:不論使用IDEA建立SpringBoot專案,還是直接在官方網站利用骨架生成SpringBoot專案,專案的結構和pom.xml檔案中內容是相似的。

3.3.2 起步依賴

在我們之前講解的SpringBoot快速入門案例中,同樣也引用了:web依賴和test依賴

spring-boot-starter-web和spring-boot-starter-test,在SpringBoot中又稱為:起步依賴

而在SpringBoot的專案中,有很多的起步依賴,他們有一個共同的特徵:就是以spring-boot-starter-作為開頭。在以後大家遇到spring-boot-starter-xxx這類的依賴,都為起步依賴。

起步依賴有什麼特殊之處呢,這裡我們以入門案例中引入的起步依賴做為講解:

  • spring-boot-starter-web:包含了web應用開發所需要的常見依賴
  • spring-boot-starter-test:包含了單元測試所需要的常見依賴

spring-boot-starter-web內部把關於Web開發所有的依賴都已經匯入並且指定了版本,只需引入 spring-boot-starter-web 依賴就可以實現Web開發的需要的功能

!

Spring的官方提供了很多現成的starter(起步依賴),我們在開發相關應用時,只需要引入對應的starter即可。

官方地址:https://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/#using.build-systems.starters

每一個起步依賴,都用於開發一個特定的功能。

舉例:當我們開發中需要使用redis資料庫時,只需要在SpringBoot專案中,引入:spring-boot-starter-redis ,即可匯入redis開發所需要的依賴。

3.3.2 SpringBoot父工程

在我們之前開發的SpringBoot入門案例中,我們透過maven引入的依賴,是沒有指定具體的依賴版本號的。

為什麼沒有指定<version>版本號,可以正常使用呢?

  • 因為每一個SpringBoot工程,都有一個父工程。依賴的版本號,在父工程中統一管理。

3.3.3 內嵌Tomcat

問題:為什麼我們之前書寫的SpringBoot入門程式中,並沒有把程式部署到Tomcat的webapps目錄下,也可以執行呢?

原因呢,是因為在我們的SpringBoot中,引入了web執行環境(也就是引入spring-boot-starter-web起步依賴),其內部已經整合了內建的Tomcat伺服器。

我們可以透過IDEA開發工具右側的maven皮膚中,就可以看到當前工程引入的依賴。其中已經將Tomcat的相關依賴傳遞下來了,也就是說在SpringBoot中可以直接使用Tomcat伺服器。

當我們執行SpringBoot的引導類時(執行main方法),就會看到命令列輸出的日誌,其中佔用8080埠的就是Tomcat。

相關文章