【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/web/91070.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91070.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91070.shtml

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

相關文章

如何調整服務器的內核參數?-哈爾濱云前沿

調整服務器內核參數是一項較為專業的操作&#xff0c;不同的操作系統調整方式略有不同&#xff0c;以下以常見的 Linux 系統為例&#xff0c;介紹一些調整服務器內核參數的一般步驟和常用參數&#xff1a;一般步驟 備份當前配置&#xff1a;在修改內核參數之前&#xff0c;先備…

C++基礎:模擬實現queue和stack。底層:適配器

引言模擬實現queue和stack&#xff0c;理解適配器&#xff0c;實現起來非常簡單。一、適配器 適配器是一種能讓原本不兼容的接口協同工作的設計模式或者組件。它的主要作用是對一個類的接口進行轉換&#xff0c;使其符合另一個類的期望接口&#xff0c;進而實現適配和復用。&am…

OI 雜題

OI 雜題字符串括號匹配例 1&#xff1a;與之前的類似&#xff0c;就是講一點技巧&#xff0c;但是比較亂&#xff0c;湊合著看吧。 字符串 括號匹配 幾何意義&#xff1a;考慮令 ( 為 111 變換&#xff0c;令 ) 為 ?1-1?1 變換&#xff0c;然后對這個 1/?11/-11/?1 構成…

【論文閱讀】Safety Alignment Should Be Made More Than Just a Few Tokens Deep

Safety Alignment Should Be Made More Than Just a Few Tokens Deep原文摘要問題提出現狀與漏洞&#xff1a;當前LLMs的安全對齊機制容易被攻破&#xff0c;即使是簡單的攻擊&#xff08;如對抗性后綴攻擊&#xff09;或良性的微調也可能導致模型越獄。核心論點&#xff1a; 作…

Generative AI in Game Development

如有侵權或其他問題&#xff0c;歡迎留言聯系更正或刪除。 出處&#xff1a;CHI 20241. 一段話總結本研究通過對來自 Reddit 和 Facebook 群組的 3,091 條獨立游戲開發者的在線帖子和評論進行定性分析&#xff0c;探討了他們對生成式 AI在游戲開發中多方面作用的認知與設想。研…

【C++算法】72.隊列+寬搜_二叉樹的最大寬度

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 662. 二叉樹最大寬度 題目描述&#xff1a; 解法 這里的寬度指的是一層的最右邊的非空節點到一層的最左邊的非空節點&#xff0c;一共的節點數。 解法一&#xff1a;硬來&am…

什么是3DVR?VR技術有哪些應用場景?

VR與3D技術解析及應用在高科技領域&#xff0c;VR和3D是兩個常被提及的名詞。那么&#xff0c;這兩者之間究竟存在著怎樣的區別與聯系呢&#xff1f;簡而來說&#xff0c;VR技術是3D技術的一種高級延展和深化應用。3D技術&#xff0c;即將二維設計圖轉化為立體、逼真的視覺效果…

棧與隊列:數據結構核心解密

棧和隊列的基本 棧(Stack)是一種后進先出(LIFO, Last In First Out)的數據結構。元素的插入和刪除操作只能在棧頂進行。常見的操作包括壓棧(push)和彈棧(pop)。 隊列(Queue)是一種先進先出(FIFO, First In First Out)的數據結構。元素的插入在隊尾進行,刪除在隊…

《C++初階之STL》【list容器:詳解 + 實現】

【list容器&#xff1a;詳解 實現】目錄前言------------標準接口介紹------------標準模板庫中的list容器是什么樣的呢&#xff1f;1. 常見的構造2. 迭代器操作std::list::beginstd::list::endstd::list::rbeginstd::list::rend3. 容量的操作std::list::sizestd::list::empty…

【灰度實驗】——圖像預處理(OpenCV)

目錄 1 灰度圖 2 最大值法 3 平均值法 4 加權均值法 5 兩個極端的灰度值 將彩色圖轉為灰度圖地過程稱為灰度化。 灰度圖是單通道圖像&#xff0c;灰度化本質就是將彩色圖的三通道合并成一個通道的過程。三種合并方法&#xff1a;最大值法&#xff0c;平均值法和加權均值法…

【linux驅動開發】編譯linux驅動程序報錯:ERROR: Kernel configuration is invalid.

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄一、報錯二、解決方法1.先編譯linux內核源碼2.再重新編譯驅動程序一、報錯 在編譯驅動程序過程中&#xff0c;經常碰到的一個小問題&#xff1a; make -C /home/lu…

Java面試寶典:MySQL中的鎖

InnoDB中鎖的類型非常多,總體上可以如下分類: 這些鎖都是做什么的?具體含義是什么?我們現在來一一學習。 1. 解決并發事務問題 我們已經知道事務并發執行時可能帶來的各種問題。最大的一個難點是:一方面要最大程度地利用數據庫的并發訪問能力,另一方面又要確保每個用戶…

設備識別最佳實踐:四維交叉驗證框架

設備識別最佳實踐&#xff1a;四維交叉驗證框架 1. MAC地址分析&#xff08;40%權重&#xff09; - 設備身份核驗 核心方法&#xff1a; # MAC地址標準化&#xff08;OUI提取&#xff09; mac"B4:2E:99:FB:9D:78" oui$(echo $mac | tr -d : | cut -c 1-6 | tr a-f A-…

《Java 程序設計》第 9 章 - 內部類、枚舉和注解

大家好&#xff0c;今天我們來學習《Java 程序設計》第 9 章的內容 —— 內部類、枚舉和注解。這三個知識點是 Java 中提升代碼靈活性和可讀性的重要工具&#xff0c;在實際開發中非常常用。接下來我們逐一展開講解&#xff0c;每個知識點都會配上可直接運行的代碼示例&#xf…

CTF Misc入門篇

在CTF比賽中&#xff0c;misc方向是必考的一個方向&#xff0c;其中&#xff0c;圖形隱寫是最最常見的類型。 先從Misc開始入門&#xff0c;一般會借助CTF SHOW解題平臺&#xff0c;解題&#xff0c;然后進行技巧總結。 目錄 圖片篇(基礎操作) misc1 misc2 misc3 misc4 …

Vulnhub 02 Breakout靶機

一、信息收集 我是在僅主機模式下掃描的。 以此去訪問端口。 80端口是上面的主頁&#xff0c;查看一下源代碼&#xff0c;發現了如下圖所示的注釋&#xff0c;翻譯過來是&#xff1a;別擔心&#xff0c;沒有人會來這里&#xff0c;安全地與你分享我的訪問權限&#xff0c;它是…

論文閱讀:2024 arxiv AutoDefense: Multi-Agent LLM Defense against Jailbreak Attacks

總目錄 大模型安全相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 AutoDefense: Multi-Agent LLM Defense against Jailbreak Attacks https://arxiv.org/pdf/2403.04783#page9.14 https://www.doubao.com/chat/14064782214316034 文章目錄…

Spring Boot 請求限流實戰:基于 IP 的高效防刷策略

前言 互聯網流量就像洪水猛獸,來得快去得也快。如果不給接口裝個“限速閥”,服務器瞬間被刷爆,宕機成真,根本不稀奇。沒有限流機制,系統就像沒有剎車的賽車,跑得太快反而翻車。為了保證服務穩定、響應迅速,保護后端資源不被惡意請求掏空,限流成必備武器。 本篇文章將…

機器學習第二課之線性回歸的實戰技巧

1 線性回歸簡介 1 線性回歸應用場景 線性回歸是一種用于分析自變量與連續型因變量之間線性關系的模型&#xff0c;其核心是通過擬合線性方程(y w_1x_1 w_2x_2 ... w_nx_n b&#xff09;來預測因變量或解釋自變量的影響。由于其簡單、可解釋性強的特點&#xff0c;線性回歸…

【時時三省】(C語言基礎)指向指針數據的指針變量

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省在了解了指針數組的基礎上&#xff0c;需要了解指向指針數據的指針變量&#xff0c;簡稱為指向指針的指針。怎樣定義一個指向指針數據的指針變量呢?下面定義一個指向指針數據的指針變量&#…