🚀?一、Spring MVC
-
MVC三層
-
Controller:樂團指揮,接收請求→調用模型→選擇視圖(
@Controller
) -
Model:樂手,處理業務邏輯與數據(POJO對象)
-
View:舞臺展示,渲染用戶界面(HTML/JSP)
比喻:去餐廳吃飯 → 服務員(View)接待 → 前廳(Controller)派單 → 后廚(Model)烹飪
-
ps. 2中提到的POJO,是說一個常規的、不受框架任何束縛或限制的對象。它除了要遵守語法之外,不應該繼承預先設定的類、實現預先設定的接口或注解。可以認為,如果一個模塊定義的對象都是pojo,那么他們只依賴JDK。
-
注解
-
@RequestMapping
:路由映射核心,定義URL入口 -
@RestController
?=?@Controller
?+?@ResponseBody
(純數據響應) -
@ResponseBody
:強制返回數據而非視圖(可修飾類/方法)
-
🔗?二、連接請求:路由的藝術
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/sayHi")public String hello() { return "Hello, Spring MVC!";}
}
-
路由規則:
-
類路徑 + 方法路徑 = 完整URL(
/user/sayHi
) -
支持多層路徑(
/user/ml/say/hi
) -
默認處理GET/POST,可通過
method=RequestMethod.POST
限定
-
📬?三、請求參數:九大接收姿勢
傳參方式 | 注解/寫法 | 示例 |
---|---|---|
1. 單個參數 | 方法形參同名接收 | ?name=spring |
2. 多個參數 | 多個形參 | ?name=zhangsan&password=123 |
3. 對象綁定 | 自動屬性填充 | Person對象?id=1&name=zhangsan |
4. 參數重命名 | @RequestParam("time") | ?time=2023 ?→?createtime 接收 |
5. 數組 | String[] | ?arrayParam=A,B,C |
6. 集合 | @RequestParam List | ?listParam=A&listParam=B |
7. JSON數據 | @RequestBody | Body中傳{"id":1,"name":"zhang"} |
8. 路徑變量 | @PathVariable | /user/{id} ?→?id 接收 |
9. 上傳文件 | @RequestPart ?+?MultipartFile | 表單文件上傳 |
避坑指南:
基本類型參數必傳(否則報500)→ 用包裝類型
Integer
替代int
參數類型不匹配 → 自動返回400錯誤
📤?四、響應處理:六種返回策略
響應類型 | 實現方式 | Content-Type |
---|---|---|
1. 靜態頁面 | @Controller ?+ 返回資源路徑 | text/html |
2. HTML片段 | @ResponseBody 返回HTML字符串 | text/html |
3. JSON數據 | 直接返回對象/Map | application/json |
4. 設置狀態碼 | response.setStatus(401) | 自定義狀態碼 |
5. 設置Header | produces="application/json" | 控制響應頭類型 |
6. 重定向/轉發 | return "redirect:/path" | 跳轉新頁面 |
黃金法則:
前端分離時代,@RestController
是主流(純數據交互),返回視圖用@Controller
🍪?五、狀態管理:Cookie與Session
// 獲取Cookie
@GetMapping("/cookie")
public String getCookie(HttpServletRequest request) {Cookie[] cookies = request.getCookies(); // 解析邏輯
}// Session操作
@PostMapping("/login")
public boolean login(String user, HttpSession session) {session.setAttribute("user", user); // 存儲return true;
}
-
Session本質:服務端哈希表(SessionID → 用戶數據)
-
Cookie-Session聯動:
-
登錄成功 →?
Set-Cookie: JSESSIONID=xxx
-
后續請求 →?
Cookie: JSESSIONID=xxx
?自動攜帶
-
安全警示:Cookie可偽造 → 服務端必須校驗!
🏗??六、應用分層:高內聚低耦合
com.example.project ├── controller # 請求入口 (UserController) ├── service # 業務邏輯 (UserService) ├── dao # 數據訪問 (UserDao) └── model # 數據模型 (User)
-
分層優勢:
-
解耦:修改業務邏輯不影響控制器
-
復用:多個Controller調用同一Service
-
標準化:各司其職,代碼清晰如樂譜🎼
-
經典比喻:
公司部門制 → 行政部(Controller)接待 → 技術部(Service)處理 → 財務部(Dao)存儲數據
???七、企業規范:優雅編碼之道
-
類名:大駝峰 (
UserController
) -
方法/變量:小駝峰 (
getUserName
) -
包名:全小寫 + 點分隔 (
com.example.service
) -
接口文檔:前后端協作的“說明書”(URL、參數、響應格式)
🎯?八、實戰四部曲
-
加法計算器:表單傳參 → 后端計算 → 返回HTML結果
-
用戶登錄:Session存儲用戶 → 首頁展示登錄狀態
-
留言板:
-
前端提交JSON → 后端
List
存儲 -
使用
lombok
簡化POJO(@Data
自動生成Getter/Setter)
-
-
圖書管理系統:
-
分層開發(Controller/Service/Dao)
-
Mock數據模擬數據庫操作
-
精髓總結:
掌握注解九式
?+?分層思維
?+?狀態管理
?= 解鎖Spring MVC終極奧義!