目錄
- Spring Boot 簡介
- Web 入門
- Spring Boot 快速入門
- HTTP 協議
- 概述
- 請求協議
- 響應協議
- 解析協議
- Tomcat
Spring Boot 簡介
Spring Boot 是由 Pivotal 團隊(后被 VMware 收購)開發的基于 Spring 框架的開源項目,于 2014 年首次發布。其核心目標是簡化 Spring 應用的搭建和開發流程,讓開發者能夠快速構建獨立運行、生產級別的 Spring 應用。
核心特點
- 自動配置(Auto-configuration)
- 根據項目中的依賴(如
spring-boot-starter-web
),自動完成相關組件的配置,減少手動 XML 或 Java 配置。 - 例如:引入
spring-boot-starter-web
后會自動配置 Spring MVC、Tomcat 等。
- 根據項目中的依賴(如
- 獨立運行(Standalone)
- 內置 Servlet 容器(Tomcat、Jetty 等),無需外部部署。
- 可通過
java -jar
啟動整個應用,適合容器化部署。
- Starter 依賴管理
- 提供豐富的
starter
模塊(如starter-data-jpa
、starter-security
),一行依賴即可集成常用技術。 - 統一版本管理,避免沖突和繁瑣配置。
- 提供豐富的
- 無 XML 配置,注解驅動
- 使用注解(如
@SpringBootApplication
、@RestController
)代替傳統 XML,降低配置復雜度。 - 默認配置 + 注解方式提升開發效率。
- 使用注解(如
- 生產級特性
- 提供如 Actuator、健康檢查、外部化配置、指標監控等功能,便于部署和運維。
適用場景
- 快速構建微服務中的獨立服務
- 構建 RESTful API 或傳統 Web 應用
- 中小型項目的敏捷開發與快速部署
- 與第三方中間件(如 MyBatis、Redis、RabbitMQ)集成開發
與 Spring 的關系
-
Spring Boot 并不是替代 Spring,而是對其的增強和封裝。
-
它基于 Spring 的核心特性(如 IoC、AOP),并提供自動配置、內嵌容器、starter 依賴等擴展能力。
-
可理解為:
Spring Boot = Spring + 自動配置 + 內嵌容器 + Starter 模塊
優勢總結
- 開發效率高:最小化配置,聚焦業務邏輯
- 上手門檻低:統一結構和約定優于配置
- 可維護性強:自動管理依賴與版本
- 生態整合好:天然支持 Spring Cloud 等微服務組件
Web 入門
Spring Boot 快速入門
需求:使用 Spring Boot 開發一個 web 應用,瀏覽器發起請求“/hello”后,給瀏覽器返回字符串"Hello World ~"
步驟:
-
創建 Spring Boot 工程,并勾選 web 開發相關依賴
-
定義 HelloController 類,添加方法 hello,并添加注解
package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;// 請求處理類 @RestController public class HelloController {@RequestMapping("/hello")public String hello() {return "Hello World~";} }
-
運行測試
運行啟動類,并在瀏覽器中輸入“localhost:8080/hello”
HTTP 協議
概述
概念:Hyper Text Transfer Protocol,超文本傳輸協議,規定了瀏覽器和服務器之間數據傳輸的規則。
特點:
- 基于 TCP 協議:面向連接,安全
- 基于請求-響應模型——一次請求對應一次響應
- HTTP 協議是無狀態的協議:
- 對于事務處理沒有記憶能力,每次請求-響應都是獨立的
- 缺點:多次請求間不能共享數據
- 優點:速度快
請求協議
-
結構組成
-
請求行:首行,格式
[請求方法] [資源路徑] [協議/版本]
例:GET /brand/findAll?name=OPPO&status=1 HTTP/1.1
-
請求頭:從第二行開始,
key: value
格式,傳遞元信息(如客戶端類型、支持的數據格式等)
例:Content-Type: application/json
(聲明請求體數據格式) -
請求體:僅 POST 請求有,存放請求參數(GET 請求參數在請求行的 URL 里)
例:{"status":1,"brandName":"Scarletkite"...}
(JSON 格式參數)
-
-
請求方式差異(GET vs POST)
對比項 | GET 請求 | POST 請求 |
---|---|---|
參數位置 | 拼在請求行的 URL 中(?name=OPPO... ) | 放在請求體里(適合復雜 / 私密數據) |
參數大小限制 | 有(瀏覽器 / 服務器對 URL 長度有限制) | 無(理論上僅受服務器配置影響) |
典型場景 | 查詢數據(如列表查詢、搜索) | 提交 / 修改數據(如新增品牌、用戶登錄) |
-
核心總結
-
清晰 HTTP 請求的 “三段式” 結構,理解 請求行(做什么) → 請求頭(怎么傳) → 請求體(傳什么) 的分工
-
區分 GET/POST 適用場景,開發 / 調試接口時能選對方式、解析對應參數位置
-
響應協議
-
結構組成
響應由 3 部分 組成,從上到下依次是:
- 響應行:首行,格式
[協議/版本] [狀態碼] [狀態描述]
例:HTTP/1.1 200 OK
(協議 HTTP/1.1,狀態碼 200,描述 OK) - 響應頭:
key: value
格式,傳遞元信息(如內容類型、緩存策略等)
例:Content-Type: application/json
(響應體是 JSON 格式) - 響應體:最后部分,存放實際響應數據(如接口返回的 JSON、HTML 內容 )
- 響應行:首行,格式
-
狀態碼分類與含義
狀態碼是響應行的核心,用 1xx ~ 5xx 分類表示請求處理結果:
分類 | 含義 & 典型場景 | 示例狀態碼(常見) |
---|---|---|
1xx | 臨時響應,表示請求已接收,需后續操作 | (實際開發少用,如 100 Continue) |
2xx | 成功!請求被正常處理 | 200(最常用,請求成功) |
3xx | 重定向!需要客戶端再發一次請求 | 302(臨時重定向)、304(資源未變,用緩存) |
4xx | 客戶端錯誤!請求有問題(如參數錯、沒權限) | 400(參數錯)、404(資源不存在)、403(權限不足) |
5xx | 服務器錯誤!服務端處理時出錯 | 500(代碼拋異常)、503(服務未就緒) |
-
常見響應頭的作用
響應頭傳遞 “輔助信息”,常用字段:
-
Content-Type
:響應體的數據格式(如application/json
表示返回 JSON) -
Content-Length
:響應體的字節長度 -
Cache-Control
:控制客戶端緩存策略(如max-age=300
表示緩存 300 秒) -
Set-Cookie
:給瀏覽器設置 Cookie
-
-
核心總結
HTTP 響應分 “響應行(狀態碼核心)→ 響應頭(傳元信息)→ 響應體(傳實際數據)” 三段,狀態碼用 1~5 開頭區分 “臨時、成功、重定向、客戶端錯、服務器錯”,響應頭補充數據格式、緩存等細節,最終通過響應體返回業務數據
解析協議
瀏覽器自帶了 HTTP 協議解析功能。瀏覽器在用戶發起網頁訪問等操作時,會自動進行一系列與 HTTP 協議相關的操作。而服務端要實現 HTTP 協議解析功能,要手搓以下代碼,就顯得很麻煩。
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;public class SimpleHttpServer {public static void main(String[] args) throws IOException {// 創建服務器Socket,監聽8080端口ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服務器已啟動,監聽端口: 8080");while (true) {// 等待客戶端連接Socket clientSocket = serverSocket.accept();System.out.println("新客戶端連接: " + clientSocket.getInetAddress());// 處理客戶端請求handleClient(clientSocket);}}private static void handleClient(Socket clientSocket) throws IOException {try (// 獲取輸入流,讀取客戶端請求BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), StandardCharsets.UTF_8));// 獲取輸出流,向客戶端發送響應OutputStream out = clientSocket.getOutputStream()) {// 讀取請求行String requestLine = in.readLine();if (requestLine == null) {return;}System.out.println("請求行: " + requestLine);// 讀取請求頭String headerLine;while ((headerLine = in.readLine()) != null && !headerLine.isEmpty()) {System.out.println("請求頭: " + headerLine);}// 構建響應內容String responseBody = "<html><body><h1>Hello, HTTP!</h1><p>這是一個簡單的HTTP響應</p></body></html>";// 構建響應頭String response = "HTTP/1.1 200 OK\r\n" +"Content-Type: text/html; charset=UTF-8\r\n" +"Content-Length: " + responseBody.getBytes(StandardCharsets.UTF_8).length + "\r\n" +"Connection: close\r\n" +"\r\n" + // 空行分隔響應頭和響應體responseBody;// 發送響應out.write(response.getBytes(StandardCharsets.UTF_8));out.flush();} finally {clientSocket.close();System.out.println("客戶端連接已關閉");}}
}
由于以上解析是固定的,所以出現了 Web 服務器,Web 服務器是一個軟件程序,對 HTTP 協議的操作進行封裝,使得程序員不必直接對協議進行操作,讓 Web 開發更加便捷。主要功能是“提供網上信息瀏覽服務”。
Tomcat
Tomcat(全稱 Apache Tomcat)是由 Apache 軟件基金會開發和維護的一款 開源的 Web 服務器與 Servlet 容器,用于運行基于 Java 的 Web 應用程序。它廣泛應用于中小型企業和開發測試環境中,是學習和部署 Java Web 的首選服務器。
Spring Boot 內置了 Tomcat,默認使用的是 org.apache.catalina.startup.Tomcat
啟動類,實現嵌入式部署:
@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}
可以通過配置文件指定端口:
server:port: 8080