SpringMVC3

一、JSON 與參數傳遞

?

1.1JSON 是什么

?

- JSON 是字符串:比如 ?{"name":"zhangsan","password":"123456","age":15}? 就是一個 JSON 字符串,它用來在前后端、服務間傳遞數據。

- JSON 庫:Fastjson、Gson 這些庫能把 JSON 字符串轉成 Java 對象,也能把 Java 對象轉成 JSON 字符串。

?

1.2傳遞 JSON vs 傳遞對象

?

- 傳遞 JSON(@RequestBody):

- 請求示例:

- URL:?http://127.0.0.1:8080/request/9?

- 請求體:

{

? ? "name": "zhangsan",

? ? "password": "123456",

? ? "age": 15

}

?

- Controller 代碼:

@RequestMapping("/r9")

public String r9(@RequestBody Person person) {

? ? return "接收到參數 person: " + person;

}

?

?

- ?@RequestBody?:把請求體里的 JSON 字符串轉成 Person 對象。

- 傳遞對象(表單參數):

- 請求示例:

- URL:?http://127.0.0.1:8080/request/5?

- 請求參數:?name=zhangsan&password=123456&age=16?(表單格式)

- Controller 代碼:

@RequestMapping("/r5")

public String r5(Person person) {

? ? return "接收到參數 person: " + person;

}

?

?

- SpringMVC 會自動把表單參數轉成 Person 對象(參數名要和對象屬性名一致)。

?

1.3路徑參數(@PathVariable)

?

- 示例 URL:?https://www.toutiao.com/article/751018054333034562/?

- 這里的 ?751018054333034562? 就是路徑里的參數。

- Controller 代碼:

@RequestMapping("/r8/article/{id}")

public String r8(@PathVariable Integer articleId) {

? ? return "接收到參數 articleId: " + articleId;

}

?

@RequestMapping("/r11/article/{id}/{type}")

public String r11(@PathVariable("id") Integer id, @PathVariable String type) {

? ? return "接收到參數 id: " + id + ", type: " + type;

}

?

?

- ?@PathVariable?:從 URL 路徑中取參數,?@PathVariable("id")? 里的 ?"id"? 要和路徑里的 ?{id}? 對應。

?

1.4常用注解

?

- @RequestMapping:基礎注解,映射 URL 路徑,可指定請求方法(GET、POST 等)。

- @GetMapping、@PostMapping:分別是 ?@RequestMapping(method = RequestMethod.GET)? 和 ?@RequestMapping(method = RequestMethod.POST)? 的縮寫。

- @RequestParam:從請求參數中取參數(比如 ??name=zhangsan?),可指定是否必傳、默認值等。

- @RequestBody:接收請求體里的 JSON 數據,轉成 Java 對象。

- @RequestPart:上傳文件時用,接收 ?MultipartFile?。

- @PathVariable:從 URL 路徑中取參數。

- @RestController:組合注解,等于 ?@Controller + @ResponseBody?,方法返回值會轉成 JSON 或字符串返回給客戶端。

?

二、Cookie 與 Session

?

2.1無狀態 vs 有狀態

?

- 無狀態:HTTP 協議本身是無狀態的,每次請求都是獨立的,服務器不記得之前的請求。比如你第一次請求和第二次請求,服務器不知道這是同一個客戶端。

- 有狀態:通過 Cookie、Session 等技術,讓服務器記住客戶端狀態。比如登錄后,服務器知道你是誰。

?

2.2Cookie

?

- 作用:在客戶端(瀏覽器)存數據,每次請求會自動帶上 Cookie。

- 示例:醫院的就診卡,卡上有病人 ID,每次看病都帶著卡,醫院服務器就知道你是誰。

- 缺點:不安全,因為 Cookie 存在客戶端,可能被篡改。

?

2.3Session

?

- 作用:在服務器存數據,每個客戶端對應一個 Session(通過 SessionID 關聯)。

- 工作流程:

1.?客戶端第一次請求,服務器創建 Session,生成 SessionID,把 SessionID 存到 Cookie 里返回給客戶端。

2.?客戶端后續請求會帶著 Cookie 里的 SessionID,服務器根據 SessionID 找到對應的 Session,獲取用戶信息。

- 示例:學校的學生證,學生證號是 SessionID,學校檔案里存著你的信息(Session 數據)。你帶著學生證(Cookie)去考試,學校根據學生證號(SessionID)查檔案(Session 數據),確認你的身份。

- 優點:安全,因為數據存在服務器,客戶端拿不到真實數據。

?

2.4Cookie 與 Session 的關系

?

- SessionID 存在 Cookie 里,客戶端靠 Cookie 傳遞 SessionID,服務器靠 SessionID 找到 Session 數據。

- 比如登錄時,服務器生成 Session 存用戶信息,把 SessionID 寫進 Cookie 給客戶端。之后客戶端每次請求都帶這個 Cookie,服務器就能識別用戶。

?

代碼示例(獲取 Cookie)

?

@RequestMapping("/getCookie")

public String getCookie(HttpServletRequest request, HttpServletResponse response) {

? ? // 從請求中取 Cookie

? ? Cookie[] cookies = request.getCookies();

? ? if (cookies != null) {

? ? ? ? for (Cookie cookie : cookies) {

? ? ? ? ? ? System.out.println("Cookie 名: " + cookie.getName() + ", 值: " + cookie.getValue());

? ? ? ? }

? ? }

? ? // 寫 Cookie 到響應

? ? Cookie cookie = new Cookie("testCookie", "testValue");

? ? response.addCookie(cookie);

? ? return "操作 Cookie 成功";

}

?

?

- HttpServletRequest:封裝了 HTTP 請求,能取 Cookie、參數等。

- HttpServletResponse:封裝了 HTTP 響應,能寫 Cookie、返回數據等。

?

三、總結

?

本節從 JSON 傳遞、參數綁定、Cookie/Session 原理到代碼示例,把 Web 開發中“數據傳遞”和“狀態保持”的核心知識點講透了。理解這些內容,你就能搞定前后端聯調、用戶登錄態管理等關鍵需求

?

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

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

相關文章

查看.bin二進制文件的方式(HxD十六進制編輯器的安裝)

文章目錄Windows 系統上安裝 HxD 十六進制編輯器的步驟。**HxD 是一款免費、輕量級的工具,適合查看和編輯 .bin 等二進制文件。****PS:實際安裝過程中會發現找不到Windows11的版本,安裝windows10的即可,并且沒有區別setup版和portable版**安裝…

Linux系統性能優化與監控

系統性能優化與監控是保障 Linux 服務器穩定運行的核心技術,涉及 ??CPU、內存、磁盤 I/O、網絡、進程?? 等多維度的指標分析、問題定位與優化策略。以下從??監控工具與指標??、??常見問題診斷??、??優化方法??三個層面詳細講解,并結合?…

如何在 React + TypeScript 中實現 JSON 格式化功能

如何在 React TypeScript 中實現 JSON 格式化功能 作為前端開發者,我們經常需要處理 JSON 數據。無論是 API 調試、配置文件編輯還是數據轉換,能夠格式化 JSON 是一項基本但非常有用的技能。本文將詳細介紹如何在 React 和 TypeScript 環境中實現 JSON…

Mac連接服務器Docker容器全攻略

蘋果電腦( macOS 系統 )連接服務器、配置容器,整體思路和 Linux 終端操作更貼近,以下結合 macOS 特點,詳細分步說明,以 Docker 容器 + 常見 Linux 服務器( 如 CentOS、Ubuntu )為例: 一、連接服務器(SSH 方式, macOS 終端原生支持 ) 1. 準備信息 找運維或云平臺…

【字節跳動】數據挖掘面試題0019:帶貨直播間推薦:現在有一個帶貨的直播間,怎么把它精準地推送給有需要的用戶

文章大綱 帶貨直播間推薦系統:原理、算法與實踐 一、推薦系統在帶貨直播中的重要性 二、數據收集與處理 1. 用戶數據 2. 直播間數據 3. 用戶行為數據 4. 數據處理與特征工程 三、推薦算法實現 1. 基于內容的推薦 2. 基于協同過濾的推薦 3. 基于知識圖譜的推薦 4. 混合推薦算法…

Windows10筆記本電腦開啟BIOS

文章目錄什么是BIOS一、方案一:快捷鍵進入二、方案二(推薦)各品牌快捷鍵大全什么是BIOS BIOS 全拼為 BasicInputOutputSystem, 即基本輸入/輸出系統,是計算機中非常基礎而且重要的程序。把這一段程序存放在一個不需要電源的記憶體(芯片)中,就…

NFS、iSCSI 和lnmp部署操作

目錄 (一)基礎配置 1.NFS服務安裝 2.修改配置文件 3.重載配置文件 4.查看共享目錄 5.客戶端掛載 6.更換共享目錄 7.基礎實驗 (二)布置lnmp平臺 1.php 安裝軟件 檢測 2.連接MySQL 測試 3.軟件實施 軟件安裝配置 &…

Redis深度解析:從緩存原理到高并發實戰

第一部分:Redis核心概念與架構設計1.1 Redis本質解析Redis(Remote Dictionary Server)作為開源的內存數據結構存儲系統,其核心價值在于:內存優先架構:數據主要存儲在內存中,讀寫性能達到10萬 QP…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博類別信息爬取

大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解架構搭建 視頻在線地址: 2026…

GD32/STM32嵌入CMSIS-DSP的庫(基于Keil)

當你要用到三角函數、開方、矩陣運算等復雜的數學運算時,可以選擇用C庫的math.h里面的函數,如果要求速度快的話就得用CMSIS-DSP庫里面的函數了,因為CMSIS-DSP庫充分運用了CM4內核的浮點運算單元(若有)和DSP相關的指令&…

頁面登錄阻止瀏覽器提醒是否保存密碼

一、原因 使用input的type"password"類型,瀏覽器會提醒是否記住密碼。 二、解決 取消type"password" 三、實現輸入密碼*代替 通過input輸入框,監聽輸入值,進行替換成*符號,避免使用input的type"password…

【iOS】dyld加載流程——應用程序的加載

目錄 前言 編譯過程與動靜態庫 編譯過程 動靜態庫 dyld 📌 什么是 dyld? dyld_shared_cache: dyld加載流程 _dyld_start dyldbootstrap::start dyld::main() 配置環境變量 共享緩存 主程序的初始化 插入動態庫 link主程序 link動態庫 弱…

從零開始,手把手教你本地部署Stable Diffusion AI繪畫(Win最新版)

本號之前有發過一篇win平臺的教程,由于是去年10月發布的,而Al繪畫技術發展很快,那篇教程已經有些不適用了,有些同學執行到第二步就出錯了。 應廣大同學的期望,我更新一版新版詳細教程。 一、前言 1.為什么要本地部署…

day21 力扣669. 修剪二叉搜索樹 力扣108.將有序數組轉換為二叉搜索樹 力扣538.把二叉搜索樹轉換為累加樹

修剪二叉搜索樹 給你二叉搜索樹的根節點 root ,同時給定最小邊界low 和最大邊界 high。通過修剪二叉搜索樹,使得所有節點的值在[low, high]中。修剪樹 不應該 改變保留在樹中的元素的相對結構 (即,如果沒有被移除,原有的父代子代關…

《設計模式之禪》筆記摘錄 - 7.中介者模式

中介者模式的定義中介者模式的定義為:Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently…

Flutter:上傳圖片,選擇相機或相冊:wechat_assets_picker

圖片選擇功能:可選單張,或多張。 1、showModalBottomSheet(選擇相冊/相機) 2、WechatImagePicker(選取圖片) 3、CompressMediaFile(圖片壓縮)1、ActionSheetUtilimport package:duca…

pytest--0

1 pytest 使用方式 pytest測試框架-- 基本功能使用詳解 2 pytest-mock常用方式 pytest–1–pytest-mock常用的方法 3

multiprocessing.Pool 中的 pickle 詳解

前言: 在 Python 的 multiprocessing.Pool 中,任務和數據需要通過序列化(pickle)傳遞給子進程。pickle 是 Python 的內置序列化模塊,用于將 Python 對象轉換為字節流,以便在進程間通信時傳遞。然而&#xf…

Java集合框架體系詳解:List/Set/Map接口對比與核心實現原理

一、集合框架核心接口對比 1.1 List/Set/Map接口特性接口類型特性描述典型實現List有序可重復,支持索引訪問ArrayList/LinkedListSet無序不可重復,基于哈希表或樹實現HashSet/TreeSetMap鍵值對存儲,鍵唯一值可重復HashMap/TreeMap核心差異&am…

LeafletJS 進階:GeoJSON 與動態數據可視化

引言 LeafletJS 作為一個輕量、靈活的 JavaScript 地圖庫,以其對 GeoJSON 數據格式的強大支持而聞名。GeoJSON 是一種基于 JSON 的地理數據格式,能夠表示點(Point)、線(LineString)、多邊形(Po…