Web后端基礎(基礎知識)

  • BS架構:Browser/Server,瀏覽器/服務器架構模式。客戶端只需要瀏覽器,應用程序的邏輯和數據都存儲在服務端。
    • 優點:維護方便
    • 缺點:體驗一般
  • CS架構:Client/Server,客戶端/服務器架構模式。需要單獨開發維護客戶端。
    • 優點:體驗不錯
    • 缺點:開發維護麻煩

請求響應-請求-postman工具

- <font style="color:rgb(44, 44, 44);">Postman是一款功能強大的網頁調試與發送網頁HTTP請求的Chrome插件。</font>

用它可以很好的簡化,可以很清晰的分析出來前后端請求回應的消息內容

請求響應-請求-日期參數&json參數

日期參數

上述演示的都是一些普通的參數,在一些特殊的需求中,可能會涉及到日期類型數據的封裝。比如,如下需求:

因為日期的格式多種多樣(如:2022-12-12 10:05:45 、2022/12/12 10:05:45),那么對于日期類型的參數在進行封裝的時候,需要通過@DateTimeFormat注解,以及其pattern屬性來設置日期的格式。

  • @DateTimeFormat注解的pattern屬性中指定了哪種日期格式,前端的日期參數就必須按照指定的格式傳遞。
  • 后端controller方法中,需要使用Date類型或LocalDateTime類型,來封裝傳遞的參數。

Controller方法:

@RestController
public class RequestController {//日期時間參數@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "OK";}
}

Postman測試:

JSON參數

我們學習JSON格式參數,主要從以下兩個方面著手:

  1. Postman在發送請求時,如何傳遞json格式的請求參數
  2. 在服務端的controller方法中,如何接收json格式的請求參數

Postman發送JSON格式數據:

服務端Controller方法接收JSON格式數據:

  • 傳遞json格式的參數,在Controller中會使用實體類進行封裝。
  • 封裝規則:JSON數據鍵名與形參對象屬性名相同,定義POJO類型形參即可接收參數。需要使用 @RequestBody標識。

  • @RequestBody注解:將JSON數據映射到形參的實體類對象中(JSON中的key和實體類中的屬性名保持一致)

實體類:Address

public class Address {private String province;private String city;//省略GET , SET 方法
}

實體類:User

public class User {private String name;private Integer age;private Address address;//省略GET , SET 方法
}

Controller方法:

@RestController
public class RequestController {//JSON參數@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";}
}

Postman測試:

請求響應-請求-路徑參數

在現在的開發中,經常還會直接在請求的URL中傳遞參數。例如:

http://localhost:8080/user/1        
http://localhost:880/user/1/0

上述的這種傳遞請求參數的形式呢,我們稱之為:路徑參數。

學習路徑參數呢,主要掌握在后端的controller方法中,如何接收路徑參數。

路徑參數:

  • 前端:通過請求URL直接傳遞參數,
  • 后端:使用{…}來標識該路徑參數,需要使用@PathVariable獲取路徑參數

Controller方法:

@RestController
public class RequestController {//路徑參數@RequestMapping("/path/{id}")public String pathParam(@PathVariable Integer id){System.out.println(id);return "OK";}
}

Postman測試:

傳遞多個路徑參數:

Postman:

Controller方法:

@RestController
public class RequestController {//路徑參數@RequestMapping("/path/{id}/{name}")public String pathParam2(@PathVariable Integer id, @PathVariable String name){System.out.println(id+ " : " +name);return "OK";}
}

總結

HTTP協議

HTTP概述

介紹

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

  • http是互聯網上應用最為廣泛的一種網絡協議
  • http協議要求:瀏覽器在向服務器發送請求數據時,或是服務器在向瀏覽器發送響應數據時,都必須按照固定的格式進行數據傳輸

如果想知道http協議的數據傳輸格式有哪些,可以打開瀏覽器,點擊F12打開開發者工具,點擊Network(網絡)來查看

瀏覽器向服務器進行請求時,服務器按照固定的格式進行解析:

服務器向瀏覽器進行響應時,瀏覽器按照固定的格式進行解析:

而我們學習HTTP協議,就是來學習請求和響應數據的具體格式內容。

特點:
  • 基于TCP協議: 面向連接,安全

TCP是一種面向連接的(建立連接之前是需要經過三次握手)、可靠的、基于字節流的傳輸層通信協議,在數據傳輸方面更安全

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

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

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

無狀態指的是客戶端發送HTTP請求給服務端之后,服務端根據請求響應數據,響應完后,不會記錄任何信息。

  • 缺點: 多次請求間不能共享數據
  • 優點: 速度快
  • 請求之間無法共享數據會引發的問題:
    • 如:京東購物。加入購物車和去購物車結算是兩次請求
    • 由于HTTP協議的無狀態特性,加入購物車請求響應結束后,并未記錄加入購物車是何商品
    • 發起去購物車結算的請求后,因為無法獲取哪些商品加入了購物車,會導致此次請求無法正確展示數據

HTTP請求協議

介紹
  • 請求協議:瀏覽器將數據以請求格式發送到服務器。包括:請求行、請求頭 、請求體
  • GET方式的請求協議:

  • 請求行:HTTP請求中的第一行數據。由:請求方式資源路徑協議/版本組成(之間使用空格分隔)
    • 請求方式:GET /POST
    • 資源路徑:/brand/findAll?name=OPPO&status=1
      • 請求路徑:/brand/findAll
      • 請求參數:name=OPPO&status=1
      • 請求路徑和請求參數之間使用?連接
      • 協議/版本: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
請求參數在請求體中
請求參數長度請求參數長度有限制(瀏覽器不同限制也不同)請求參數長度沒有限制
安全性安全性低。原因:請求參數暴露在瀏覽器地址欄中。安全性相對高
獲取請求數據

Web服務器(Tomcat)對HTTP協議的請求數據進行解析,并進行了封裝(HttpServletRequest),并在調用Controller方法的時候傳遞給了該方法。這樣,就使得程序員不必直接對協議進行操作,讓Web開發更加便捷。

HTTP響應協議

格式介紹
  • 響應協議:服務器將數據以響應格式返回給瀏覽器。包括:響應行 、響應頭 、響應體

  • 響應行(以上圖中紅色部分):響應數據的第一行。響應行由協議及版本響應狀態碼狀態碼描述組成
    • 協議/版本: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 ;
  • 響應體(以上圖中綠色部分): 響應數據的最后一部分。存儲響應的數據
    • 響應體和響應頭之間有一個空行隔開(作用:用于標記響應頭結束)
響應狀態碼
狀態碼分類說明
1xx響應中 — 臨時狀態碼。表示請求已經接受,告訴客戶端應該繼續請求或者如果已經完成則忽略
2xx成功 — 表示請求已經被成功接收,處理已完成
3xx重定向 — 重定向到其它地方,讓客戶端再發起一個請求以完成整個處理
4xx客戶端錯誤 — 處理發生錯誤,責任在客戶端,如:客戶端的請求一個不存在的資源,客戶端未被授權,禁止訪問等
5xx服務器端錯誤 — 處理發生錯誤,責任在服務端,如:服務端拋出異常,路由出錯,HTTP版本不支持等

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

  • <font style="color:rgb(46,161,33);">200 ok</font> 客戶端請求成功
  • <font style="color:rgb(216,57,49);">404 Not Found</font> 請求資源不存在(客戶端有問題)
  • <font style="color:rgb(216,57,49);">500 Internal Server Error</font> 服務端發生不可預期的錯誤

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

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

相關文章

MySQL(56)什么是復合索引?

復合索引&#xff08;Composite Index&#xff09;&#xff0c;也稱為多列索引&#xff0c;是在數據庫表的多列上創建的索引。它可以提高涉及多個列的查詢性能&#xff0c;通過組合多個列的值來索引數據。復合索引特別適用于需要同時過濾多列的查詢。 復合索引的優點 提高多列…

高并發下的緩存擊穿/雪崩解決方案

有效解決緩存擊穿和雪崩的方法包括&#xff1a;1. 使用互斥鎖處理緩存擊穿&#xff1b;2. 采用熔斷器模式防止雪崩&#xff1b;3. 實施緩存預熱和降級策略&#xff1b;4. 利用分片和多級緩存分散請求壓力。這些方法各有優劣&#xff0c;需根據實際業務場景靈活調整和結合使用。…

【讀論文】OpenAI o3與o4系統模型技術報告解讀

回顧一下,4月16日,OpenAI發布了一份關于其o系列新模型——OpenAI o3和OpenAI o4-mini——的System Card。這份文檔不僅揭示了這兩款模型在推理能力和工具使用方面的顯著進步,也詳細闡述了其訓練方法、數據來源、安全評估以及在圖像理解生成、數學推理等多個核心領域的表現。…

第1課、LangChain 介紹

LangChain 介紹 LangChain 是一個以大語言模型&#xff08;LLM, Large Language Model&#xff09;為核心的開發框架&#xff0c;旨在幫助開發者高效地將如 GPT-4 等大型語言模型與外部數據源和計算資源集成&#xff0c;構建智能化應用。 1.1 工作原理 如上圖所示&#xff…

【論文閱讀28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆開、篩優質因子&#xff0c;再用 CNN-BiLSTM-Attention 來動態預測每個子序列&#xff0c;最后重構出總位移&#xff0c;預測效果超越傳統模型。 文章目錄 1 引言2 方法2.1 位移時間序列加性模型2.2 變分模態分解 (VMD) 具體步驟2.3.1 樣本熵&#xff08;S…

[論文閱讀] 人工智能+軟件工程(軟件測試) | 當大語言模型遇上APP測試:SCENGEN如何讓手機應用更靠譜

當大語言模型遇上APP測試&#xff1a;SCENGEN如何讓手機應用更靠譜&#xff1f; 一、論文基礎信息 論文標題&#xff1a;LLM-Guided Scenario-based GUI Testing&#xff08;《大語言模型引導的基于場景的GUI測試》&#xff09;作者及機構&#xff1a;Shengcheng Yu等&#x…

香橙派3B學習筆記7:snap安裝管理軟件包_打包程序與依賴

有時可以嘗試把程文件與其依賴一塊打包安裝&#xff0c;這里就學習一下。 ssh &#xff1a; orangepi本地ip 密碼 &#xff1a; orangepi 操作系統發行版&#xff1a; 基于 Ubuntu 20.04.6 LTS&#xff08;Focal Fossa&#xff09;的定制版本&#xff0c;專門為 Orange Pi 設備…

Playwright 測試框架 - .NET

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】

Model Context Protocol (MCP) 是一個前沿框架

微軟發布了 Model Context Protocol (MCP) 課程&#xff1a;mcp-for-beginners。 Model Context Protocol (MCP) 是一個前沿框架&#xff0c;涵蓋 C#、Java、JavaScript、TypeScript 和 Python 等主流編程語言&#xff0c;規范 AI 模型與客戶端應用之間的交互。 MCP 課程結構 …

【量化】策略交易 - 均線策略(Moving Average Strategy)- 代碼增強版本

策略交易 - 均線策略&#xff08;Moving Average Strategy&#xff09;- 代碼增強版本 一、前言 本文主要是針對 【量化】策略交易 - 均線策略&#xff08;Moving Average Strategy&#xff09; 中的代碼事例&#xff0c;進行邏輯的增強&#xff0c;添加了模擬買入和賣出邏輯&…

為什么要引入內聯函數?

C 中引入內聯函數主要有以下幾個目的&#xff1a; 提高程序運行效率 - 普通函數調用會有一定的開銷&#xff0c;如保存現場、傳遞參數、跳轉到函數地址執行等。內聯函數在編譯時&#xff0c;會將函數體直接插入到調用處&#xff0c;避免了函數調用的開銷&#xff0c;從而提高程…

C++.OpenGL (17/64)模型(Model)

模型(Model) 模型系統架構 #mermaid-svg-Zaji5BPdvnIkXIVg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Zaji5BPdvnIkXIVg .error-icon{fill:#552222;}#mermaid-svg-Zaji5BPdvnIkXIVg .error-text{fill:#55222…

【Java學習筆記】System類

System 類 常用方法 方法描述System.exit()退出當前程序System.arraycopy(源數組&#xff0c;源數組起始索引&#xff0c;目標數組&#xff0c;目標數組起始索引&#xff0c;拷貝長度)復制數組元素&#xff0c;比較適合底層調用System.currentTimeMillis()返回當前時間距離 1…

因泰立科技H1X激光雷達:因泰立科技為智慧工業注入新動力

在當今工業領域&#xff0c;精準測量與高效作業是推動產業升級的關鍵因素。因泰立科技推出的H1X三維輪廓掃描激光雷達&#xff0c;憑借其卓越的性能和廣泛的應用場景&#xff0c;正成為智慧工業中不可或缺的高科技裝備。 產品簡介 H1X三維輪廓掃描激光雷達是因泰立科技基于二維…

【threejs】每天一個小案例講解:創建基本的3D場景

代碼倉 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;無需安裝依賴&#xff0c;直接liver-server運行/直接打開chapter01中的html文件 運行效果圖 知識要點 核心運行代碼 <!DOCTYPE html><html><head><t…

微軟PowerBI考試 PL300-使用 Power BI 準備數據以供分析【提供練習數據】

微軟PowerBI考試 PL300-使用 Power BI 準備數據以供分析 您將了解如何使用 Power Query 從不同的數據源中提取數據&#xff0c;選擇存儲模式和連接性類型。 您還將了解在對數據進行建模之前&#xff0c;如何分析、清理數據以及將數據加載到 Power BI 中。 在 Power BI 中獲取…

Linux與Windows切換使用Obsidian,出現 unexplained changes 問題的解決

如果你的Obsidian文檔在Linux與Windows間來回切換&#xff0c;可能會涉及到文件的保存換行符問題&#xff0c;但這樣的話就容易導致一個問題&#xff0c;那就是內容無差異&#xff0c;Obsidian卻提示unexplained changes&#xff0c;Windows系統下的解決方法如下&#xff0c;找…

Python爬蟲-爬取各省份各年份高考分數線數據,進行數據分析

前言 本文是該專欄的第60篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文,筆者將基于Python爬蟲,爬取各省份歷年以來的“各年份高考分數線”進行數據分析。 廢話不多說,具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。接下來,跟著筆者直接往下看…

基于cornerstone3D的dicom影像瀏覽器 第三十章 心胸比例測量工具CTRTool

文章目錄 前言一、實現過程1. 學習CobbAngleTool源碼2. 新建CTRTool.js文件3. 重寫constructor函數4. 重寫defaultGetTextLines函數5. 增加_calculateLength函數6. 重寫_calculateCachedStats函數7. 重寫renderAnnotation函數 二、使用步驟1.引入庫2. 添加到cornerstoneTools3.…

[嵌入式AI從0開始到入土]18_Ascend C算子開發環境(S5賽季)

[嵌入式AI從0開始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完魚再把鏈接補上 可以關注我的B站號工具人呵呵的個人空間&#xff0c;后期會考慮出視頻教程&#xff0c;務必催更&#xff0c;以防我變身鴿王。 第1期 昇騰Altas 200 DK上手 第2期 下載昇騰案例并運行 第3期 官…