【Spring Boot 快速開發】一、入門

目錄

  • Spring Boot 簡介
  • Web 入門
    • Spring Boot 快速入門
    • HTTP 協議
      • 概述
      • 請求協議
      • 響應協議
      • 解析協議
    • Tomcat

Spring Boot 簡介

Spring Boot 是由 Pivotal 團隊(后被 VMware 收購)開發的基于 Spring 框架的開源項目,于 2014 年首次發布。其核心目標是簡化 Spring 應用的搭建和開發流程,讓開發者能夠快速構建獨立運行、生產級別的 Spring 應用

核心特點

  1. 自動配置(Auto-configuration)
    • 根據項目中的依賴(如 spring-boot-starter-web),自動完成相關組件的配置,減少手動 XML 或 Java 配置。
    • 例如:引入 spring-boot-starter-web 后會自動配置 Spring MVC、Tomcat 等。
  2. 獨立運行(Standalone)
    • 內置 Servlet 容器(Tomcat、Jetty 等),無需外部部署。
    • 可通過 java -jar 啟動整個應用,適合容器化部署。
  3. Starter 依賴管理
    • 提供豐富的 starter 模塊(如 starter-data-jpastarter-security),一行依賴即可集成常用技術。
    • 統一版本管理,避免沖突和繁瑣配置。
  4. 無 XML 配置,注解驅動
    • 使用注解(如 @SpringBootApplication@RestController)代替傳統 XML,降低配置復雜度。
    • 默認配置 + 注解方式提升開發效率。
  5. 生產級特性
    • 提供如 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 ~"

在這里插入圖片描述

步驟:

  1. 創建 Spring Boot 工程,并勾選 web 開發相關依賴

    在這里插入圖片描述

  2. 定義 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~";}
    }
    
  3. 運行測試

    在這里插入圖片描述

    運行啟動類,并在瀏覽器中輸入“localhost:8080/hello”

    在這里插入圖片描述

HTTP 協議

概述

概念:Hyper Text Transfer Protocol,超文本傳輸協議,規定了瀏覽器和服務器之間數據傳輸的規則。

特點:

  1. 基于 TCP 協議:面向連接,安全
  2. 基于請求-響應模型——一次請求對應一次響應
  3. HTTP 協議是無狀態的協議:
    • 對于事務處理沒有記憶能力,每次請求-響應都是獨立的
    • 缺點:多次請求間不能共享數據
    • 優點:速度快

請求協議

  1. 結構組成

    • 請求行:首行,格式 [請求方法] [資源路徑] [協議/版本]
      例:GET /brand/findAll?name=OPPO&status=1 HTTP/1.1

    • 請求頭:從第二行開始,key: value 格式,傳遞元信息(如客戶端類型、支持的數據格式等)
      例:Content-Type: application/json(聲明請求體數據格式)

    • 請求體:僅 POST 請求有,存放請求參數(GET 請求參數在請求行的 URL 里)
      例:{"status":1,"brandName":"Scarletkite"...}(JSON 格式參數)

  2. 請求方式差異(GET vs POST)

對比項GET 請求POST 請求
參數位置拼在請求行的 URL 中(?name=OPPO...放在請求體里(適合復雜 / 私密數據)
參數大小限制有(瀏覽器 / 服務器對 URL 長度有限制)無(理論上僅受服務器配置影響)
典型場景查詢數據(如列表查詢、搜索)提交 / 修改數據(如新增品牌、用戶登錄)
  1. 核心總結

    • 清晰 HTTP 請求的 “三段式” 結構,理解 請求行(做什么)請求頭(怎么傳)請求體(傳什么) 的分工

    • 區分 GET/POST 適用場景,開發 / 調試接口時能選對方式、解析對應參數位置

響應協議

  1. 結構組成

    響應由 3 部分 組成,從上到下依次是:

    • 響應行:首行,格式 [協議/版本] [狀態碼] [狀態描述]
      例:HTTP/1.1 200 OK(協議 HTTP/1.1,狀態碼 200,描述 OK)
    • 響應頭key: value 格式,傳遞元信息(如內容類型、緩存策略等)
      例:Content-Type: application/json(響應體是 JSON 格式)
    • 響應體:最后部分,存放實際響應數據(如接口返回的 JSON、HTML 內容 )
  2. 狀態碼分類與含義

    狀態碼是響應行的核心,用 1xx ~ 5xx 分類表示請求處理結果:

分類含義 & 典型場景示例狀態碼(常見)
1xx臨時響應,表示請求已接收,需后續操作(實際開發少用,如 100 Continue)
2xx成功!請求被正常處理200(最常用,請求成功)
3xx重定向!需要客戶端再發一次請求302(臨時重定向)、304(資源未變,用緩存)
4xx客戶端錯誤!請求有問題(如參數錯、沒權限)400(參數錯)、404(資源不存在)、403(權限不足)
5xx服務器錯誤!服務端處理時出錯500(代碼拋異常)、503(服務未就緒)
  1. 常見響應頭的作用

    響應頭傳遞 “輔助信息”,常用字段:

    • Content-Type:響應體的數據格式(如 application/json 表示返回 JSON)

    • Content-Length:響應體的字節長度

    • Cache-Control:控制客戶端緩存策略(如 max-age=300 表示緩存 300 秒)

    • Set-Cookie:給瀏覽器設置 Cookie

  2. 核心總結

    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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916567.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916567.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916567.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

laravel chunkById導出數據亂序問題

2025年7月28日17:47:29 這幾天在做數據導出優化&#xff0c;使用xlswriter作為導出組件&#xff0c;但是發現在 使用 $base->chunkById(2000, function ($list) use ($writer, $sheet1) { 發現導出的數據是亂的&#xff0c;偶爾有些重復&#xff0c;偶爾有些少了&#xff0c…

Spring IOC與DI

spring的兩大思想:IOC與AOP一、ioc的概念什么叫控制翻轉?之前:對象的使用方,創建對象,對象的控制權,在對象的使用方手中.spring:對象的控制權交給了spring.舉個例子:智能駕駛,之前車的使用權在人手中,而現在在ai手中,這就是控制反轉.什么叫ioc:之前車企生產車需要做整個車,費事…

【圖像處理基石】Segment Anything Model (SAM) 調研

Segment Anything Model (SAM) 是由 Meta AI 開發的革命性圖像分割模型,它能夠對圖像中的任何物體進行分割,無需針對特定類別進行訓練。SAM 具有以下特點: 通用性:可以分割任何視覺對象,無論是否見過該類別 靈活性:支持多種輸入提示(點、框、掩碼或文本) 實時性:在普通…

unisS5800XP-G交換機配置命令之端口篇

一、批量配置端口(1) 進入系統視圖。system-view(2) 指定接口范圍&#xff0c;并進入接口批量配置視圖。¡ 指定一個不帶別名的接口列表。interface range { interface-type interface-number [ to interface-type interface-number ] } &<1-24>¡…

MySQL中的 redolog

什么是redo log如果我們只在內存的 Bufer Pool中修改了頁面&#xff0c;假設在事務提交后突然發生了某個故障導致內存中的數據都失效了&#xff0c;那么這個已經提交的事務在數據庫中所做的更改也就跟著丟失了&#xff0c;這是我們所不能忍受的。那么&#xff0c;如何保證這個持…

數據結構之 【排序】(非遞歸實現快速排序)

目錄 1.引入 2.非遞歸實現快排的思想 3.非遞歸實現快排圖解 4.完整代碼 1.引入 遞歸不可避免的話題就是防止棧溢出 所以程序員需要具備遞歸改非遞歸的能力 &#xff0c;一般來說&#xff0c;抓住遞歸中變化的量是關鍵 void QuickSort(int* a, int left, int right){if (left…

CLAP文本-音頻基礎模型: LEARNING AUDIO CONCEPTS FROM NATURAL LANGUAGE SUPERVISION

一、TL&#xff1b;DR 現在的做法有什么問題&#xff1f;主流范式是 “一個類別標簽對應多個錄音”&#xff0c;需要提前標注預測預先定義的類別&#xff0c;只能做閉集理解&#xff0c;失去靈活性 我們怎么做&#xff1f;通過兩個編碼器和對比學習機制建立語言與音頻的關聯&a…

Flink2.0學習筆記:Stream API 常用轉換算子

EC0720/FLINKTASK-TEST-STREAM/demo at master stevensu1/EC0720 先看測試效果&#xff1a;控制臺 測試效果&#xff1a;監控服務端 主要的轉換算子包括&#xff1a; 轉換算子 filter:過濾包含“Flink”的輸入 轉換算子 map: 將每行數據前添加“Processed: ”并轉為大寫 轉…

一、Python環境、Jupyter與Pycharm

安裝Python由于RAG項目中所需要的Python版本必須高于3.8&#xff0c;經過篩選&#xff0c;最終選擇了3.10.11這個版本py --version Python 3.10.11安裝過程略過&#xff0c;但對于幾個基礎的命令作個筆記記錄where python找到python啟動器的位置D:\>where python C:\Users\x…

Flink CEP 動態模板與規則動態修改實踐完全手冊

1. Flink CEP:從靜態規則到動態江湖 Flink 的復雜事件處理(CEP)庫就像一個武功高強的俠客,能從數據流中精準捕獲特定模式,堪稱流處理界的“降龍十八掌”。但問題來了:傳統 CEP 規則通常是寫死在代碼里的,就像刻在石碑上的武功秘籍,改起來費勁不說,還得重啟應用,簡直…

vue3.2 + echarts5.6 + ant-design-vue 3.x 實現自定義 echarts 圖例

文章目錄概要技術細節效果概要 需求需要實現圖例移入顯示描述說明 故實現自定義圖例 技術細節 <template><div class"custom-legend"><divv-for"item in legends":key"item.name"class"legend-item":class"{ i…

【2025年7月25日】TrollStore巨魔商店恢復在線安裝

就在今日7月25日&#xff0c;TrollStore的在線安裝功能再次變得可用&#xff0c;這對于許多iPhone用戶來說無疑是個喜訊。在經歷了近三個月的中斷后&#xff0c;巨魔商店的企業證書意外的到來了&#xff0c;使得用戶能夠重新采用在線安裝的方式&#xff01; 在線安裝地址在文…

【05】C#入門到精通——C# 面向對象、類、靜態變量static、類與類之間的調用

文章目錄1 引入例子2 創建類2.1 類的訪問屬性2.2 英雄 特點類2.3 英雄信息打印3 靜態變量static4 類 調用 類4.1 非靜態 成員函數4.2 靜態 成員函數1 引入例子 比如游戲中 描述英雄的角色&#xff0c; 我們可以像下面這樣&#xff0c;給每一個英雄特點及擁有技能分別定義變量…

單片機的硬件結構

單片機的硬件結構 一、課程導入 在上一節課《認識單片機》中&#xff0c;我們知道單片機就像一個超級迷你的工廠&#xff0c;有著類似工廠的各個組成部分。而這個 “迷你工廠” 能正常運轉&#xff0c;離不開其內部嚴謹的硬件結構。就像一座大廈&#xff0c;只有基礎結構穩固且…

multiprocessing模塊使用方法(二)

spawn_main是Python multiprocessing模塊的核心內部函數&#xff0c;用于實現spawn啟動方法的子進程初始化。以下結合代碼Demo詳細說明其使用方法和推薦場景。一、spawn_main的功能與定位核心作用&#xff1a; 在spawn模式下啟動子進程&#xff0c;負責進程間通信管道的建立和資…

編程與數學 03-002 計算機網絡 07_路由算法

編程與數學 03-002 計算機網絡 07_路由算法一、靜態路由算法&#xff08;一&#xff09;手工配置路由表的方法&#xff08;二&#xff09;靜態路由的優缺點二、動態路由算法原理&#xff08;一&#xff09;距離矢量算法&#xff08;如貝爾曼 - 福特算法&#xff09;&#xff08…

使用Python,OpenCV計算跑圖的圖像彩色度

使用Python&#xff0c;OpenCV計算跑圖的圖像彩色度 這篇博客將介紹如何計算跑圖里最鮮艷的top25圖片和最灰暗的top25圖片并顯示色彩彩色度值展示。 效果圖 以下分別是最鮮艷top25和最灰暗top25對比效果圖&#xff1a; 最鮮艷top25效果圖&#xff1a; 最灰暗top25效果圖…

LeetCode 60:排列序列

LeetCode 60&#xff1a;排列序列問題定義與核心挑戰 給定整數 n 和 k&#xff0c;返回集合 {1,2,...,n} 的第 k 個字典序排列。直接生成所有排列再遍歷到第 k 個的方法&#xff08;時間復雜度 O(n!)&#xff09;會因 n≥10 時階乘爆炸而超時&#xff0c;因此需要 數學推導 貪…

亞遠景-傳統功能安全VS AI安全:ISO 8800填補的標準空白與實施難點

一、為什么需要ISO 8800&#xff1a;傳統安全標準的“盲區”傳統功能安全&#xff08;ISO 26262&#xff09;? 假設&#xff1a;系統行為可被完整規格化&#xff0c;失效模式可枚舉&#xff0c;風險可用概率-危害矩陣量化。? 盲區&#xff1a;對“設計意圖正確&#xff0c;但…

菜鳥教程 R語言基礎運算 注釋 和數據類型

菜鳥教程 R語言基礎運算 注釋 和數據類型 1.注釋 注釋主要用于一段代碼的解析&#xff0c;可以讓閱讀者更易理解&#xff0c;編程語言的注釋會被編譯器忽略掉&#xff0c;且不會影響代碼的執行。 一般編程語言的注釋分為單行注釋與多行注釋&#xff0c;但是 R 語言只支持單行注…