当前位置: 首页 > news >正文

Spring Web MVC ①

🚀 一、Spring MVC

  1. MVC三层

    • Controller:乐团指挥,接收请求→调用模型→选择视图(@Controller

    • Model:乐手,处理业务逻辑与数据(POJO对象)

    • View:舞台展示,渲染用户界面(HTML/JSP)
      比喻:去餐厅吃饭 → 服务员(View)接待 → 前厅(Controller)派单 → 后厨(Model)烹饪

ps. 2中提到的POJO,是说一个常规的、不受框架任何束缚或限制的对象。它除了要遵守语法之外,不应该继承预先设定的类、实现预先设定的接口或注解。可以认为,如果一个模块定义的对象都是pojo,那么他们只依赖JDK。

  1. 注解

    • @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数据@RequestBodyBody中传{"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数据直接返回对象/Mapapplication/json
4. 设置状态码response.setStatus(401)自定义状态码
5. 设置Headerproduces="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联动

    1. 登录成功 → Set-Cookie: JSESSIONID=xxx

    2. 后续请求 → 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、参数、响应格式)


🎯 八、实战四部曲

  1. 加法计算器:表单传参 → 后端计算 → 返回HTML结果

  2. 用户登录:Session存储用户 → 首页展示登录状态

  3. 留言板

    • 前端提交JSON → 后端List存储

    • 使用lombok简化POJO(@Data自动生成Getter/Setter)

  4. 图书管理系统

    • 分层开发(Controller/Service/Dao)

    • Mock数据模拟数据库操作

精髓总结
掌握注解九式 + 分层思维 + 状态管理 = 解锁Spring MVC终极奥义!

http://www.lqws.cn/news/519157.html

相关文章:

  • 用 Boost 库解析 .ini 和 .json 文件时的“坑”:注释导致的解析错误与解决方案
  • 湖北理元理律师事务所:债务规划中的法律与心理双轨模型
  • 如何在 Manjaro Linux 上安装 Docker 容器
  • OpenCV——cv::floodFill
  • 卷积神经网络(Convolutional Neural Network, CNN)
  • 使用pyflink编写demo并将任务提交到yarn集群
  • 大塘至浦北高速:解锁分布式光伏“交能融合”密码,引领绿色交通革命
  • Redis HyperLogLog误差率0.81%的由来:从算法原理到Redis实现
  • UNIAPP入门基础
  • 如何快速将iPhone中的文本保存到电脑上
  • [架构之美]在Linux上通过源码编译安装Nginx(十四)
  • golang实现一个mysql中随机获取cookies的API
  • 数字隔离器,如何扛起现代智能家电的电气安全“大旗”
  • [Java实战]Windows系统JDK21安装与JDK8切换指南(三十九)
  • 利用亮数据实现海外网站数据自动抓取
  • 回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型
  • 【CUDA调优指南】缓存访存流程
  • 商务年度总结汇报PPT模版分享
  • 板凳-------Mysql cookbook学习 (十--10)
  • 笔记02:布线-差分对的设置与添加
  • 定制开发开源AI智能名片与S2B2C商城小程序的内容分发体系构建:基于“1+N“素材复用模型的创新实践
  • 旧物回收小程序:让旧物重获新生的魔法钥匙
  • 14.Linux Docker
  • Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory
  • 淘宝API安全合规指南:避免数据泄露与封禁
  • 智能质检对呼叫中心职场有什么作用
  • 深入剖析 Spring AOP
  • 迁移学习—基于猫狗数据集
  • 【DataWhale组队学习】AI办公实践与应用-数据分析
  • Ubuntu 物理桌面远程访问教程(基于 RealVNC / mstsc)