当前位置: 首页 > 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终极奥义!

相关文章:

  • 网站维护公告模板微信广告
  • 查看邮箱注册的网站百度seo怎么收费
  • 短视频素材大全wordpress seo教程
  • 专门做化妆的招聘网站网站出售
  • 网站涉及敏感视频等该怎么做在线seo推广软件
  • 真人性做爰video网站seo优化报告
  • 深入剖析 Spring AOP
  • 【机器人编程基础】Python模块的定义和导入
  • Spring Boot 系统开发:打造高效、稳定、可扩展的企业级应用
  • 【AI论文】拖拽式大型语言模型:零样本提示到权重的生成
  • 机器学习基础 线性回归与 Softmax 回归
  • 【EI会议征稿】东北大学主办第三届机器视觉、图像处理与影像技术国际会议(MVIPIT 2025)
  • 惯性导航——陀螺仪
  • 移除wordpress后台“评论”菜单的三种方法
  • 云计算-Azure Functions :构建事件驱动的云原生应用报告
  • 深入理解提示词工程:原理、分类与实战应用
  • 远程控制软件哪个好用跨国安全
  • AI目前应用方向和落地的解决方案
  • 自动化测试--Appium和ADB及常用指令
  • 【android bluetooth 协议分析 10】【AVRCP详解1】【PlaybackStateCompat类如何查看】
  • C++ 多线程深度解析:掌握并行编程的艺术与实践
  • AES加密:为你的PDF文档加上一道钢铁防线
  • 【Orange Pi Zero 3】-usb摄像头项目
  • 成都芯谷金融中心·文化科技园打造文化科技高地
  • JS学习--第十章
  • 南北差异之——跨端理解能力