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

Spring MVC 01

什么是Spring Web MVC

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring

MVC"

然⽽要真正的理解什么是 Spring MVC?我们⾸先要搞清楚什么是 MVC?

MVC定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分

View(视图)指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源.

Model(模型)是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分.

Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型

来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型

⽐如去饭店吃饭
客⼾进店之后, 服务员来接待客⼾点餐, 客⼾点完餐之后, 把客⼾菜单交给前厅, 前厅根据客⼾菜单给后厨下达命令. 后厨负责做饭, 做完之后, 再根据菜单告诉服务员, 这是X号餐桌客⼈的饭. 在这个过程中
服务员就是View(视图), 负责接待客⼾, 帮助客⼾点餐, 以及给顾客端饭
前厅就是Controller(控制器), 根据⽤⼾的点餐情况, 来选择给哪个后厨下达命令.
后厨就是Model(模型), 根据前厅的要求来完成客⼾的⽤餐需求

什么是Spring MVC ?

MVC 是⼀种架构设计模式, 也是⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现. 除此之外,

Spring MVC还是⼀个Web框架.

总结来说,Spring MVC 是⼀个实现了 MVC 模式的 Web 框架.

所以, Spring MVC主要关注有两个点:

1.MVC
2.Web框架
Spring MVC 全称是 Spring Web MVC

学习Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.

咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互.

主要分以下三个⽅⾯:

1.建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的

Spring 程序。

2.请求:⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是获取参数 的功能.

3.响应:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾,,也就是响应.

⽐如⽤⼾去银⾏存款
1.建⽴连接: 去柜台
2.请求: 带着银⾏卡, ⾝份证去存款
3.响应: 银⾏返回⼀张存折.

对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC

建⽴连接

在 Spring MVC 中使⽤@RequestMapping来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤我们先来看看代码怎么写

创建⼀个 Controller 类,实现⽤⼾通过浏览器和程序的交互

@RestController public class HelloController { @RequestMapping("/hello") public String hello(){ return "hello ,Spring Boot"; }
接下来访问http://127.0.0.1:8080/hello就可以看到程序返回的数据了

@RequestMapping 注解介绍

@RequestMapping是 Spring Web MVC 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的

路由映射的.

表⽰服务收到请求时, 路径为 /hello 的请求就会调⽤ hello 这个⽅法的代码.

路由映射: 当⽤⼾访问⼀个 URL 时, 将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射.

既然@RequestMapping已经可以达到我们的⽬的了, 我们为什么还要加@RestController

呢?

我们把@RestController去掉, 再来访问⼀次:

发现404报错了

这就是@RestController起到的作⽤.

⼀个项⽬中, 会有很多类, 每个类可能有很多的⽅法, Spring程序怎么知道要执⾏哪个⽅法呢?

Spring会对所有的类进⾏扫描, 如果类加了注解@RestController, Spring才会去看这个类⾥⾯的⽅法有没有加@RequestMapping这个注解, 当然他的作⽤不⽌这⼀点,

404 资源不存在:1.注解写错了2.路径不对

@RequestMapping 使⽤

@RequestMapping既可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + ⽅法路径.

@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息

@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

注解不分先后顺序

@RequesMapping 路径 " / " 可加可不加; 规范:加上

建议添加类注解 : 1.可以避免重复;2.增加代码可读性

@RequestMapping 是 GET 还是 POST 请求?

浏览器只支持get请求

GET请求:

浏览器发送的请求类型都是get, 通过以上案例, 可以看出来@RequestMapping⽀持get请求.

POST 请求:

我们通过form表单来构造请求:

创建test.html, html代码:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/hello/v1" method="post"> <input type="submit" value="提交"> </form> </body> </html>

前端代码放在static⽬录下, 访问⽅式为:http://127.0.0.1:8080/test.html

不要通过idea访问

指定GET/POST⽅法类型

我们可以显⽰的指定@RequestMapping 来接收POST的情况
@RequestMapping("/hello") @RestController public class HelloController { @RequestMapping(value="/v1",method= RequestMethod.GET) public String hello(){ return "hello ,Spring Boot"; }

405:请求方式不正确

@GetMapping("v4") public String v4(){ return "只支持get请求"; } @PostMapping("/v5") public String v5(){ return "只支持post请求"; } @PutMapping("/v6") public String v6(){ return "只支持put请求"; } @DeleteMapping("v7") public String v7(){ return "只支持delete请求"; }

请求

访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求, 主要是学习如何传递参数到后端以及后端如何接收.

传递参数, 主要是使⽤浏览器和Postman来模拟.

后端开发⼈员⽆需过度关注如何传递参数, 了解即可, 实际开发中以Postman测试为主.

⽐如餐厅的厨师, 不关注⽤⼾是在店⾥下单, 还是外卖平台下单, 或者⼩程序下单, 只需要知道如何接收订单, 根据订单做出对应的菜肴就可以了.

传递单个参数

接收单个参数, 在 Spring MVC 中直接⽤⽅法中的参数就可以,⽐如以下代码:

@RequestMapping("/r1") public String r1(String name){ return "接受参数,name="+name; }

注意事项

使⽤基本类型来接收参数时, 参数必须传(除boolean类型), 否则会报500错误

类型不匹配时, 会报400错误.

传递多个参数

如何接收多个参数呢?

和接收单个参数⼀样, 直接使⽤⽅法的参数接收即可. 使⽤多个形参.

@RequestMapping("r3") public String r3(String name,Integer age){ return "接受到参数,name"+ name +",age"+age; }

传递对象

如果参数⽐较多时, ⽅法声明就需要有很多形参. 并且后续每次新增⼀个参数, 也需要修改⽅法声明.
我们不妨把这些参数封装为⼀个对象.
Spring MVC 也可以⾃动实现对象参数的赋值,⽐如 Person 对象:
public class Person { private Integer id; private String name; private int age; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + '}'; } }
@RequestMapping("/r5") public String r5(Person person){ return "接收到参数, person:" + person; }

Spring 会根据参数名称⾃动绑定到对象的各个属性上, 如果某个属性未传递, 则赋值为null(基本类型则赋值为默认初识值, ⽐如int类型的属性, 会被赋值为0)

http://www.jsqmd.com/news/662185/

相关文章:

  • Archon是什么?AI系统架构与Agent框架解析
  • 5分钟搞定:用BLAST快速检测fastq污染源(附Python脚本)
  • Unity ApplyShadowBias 返回什么,什么是Shadow Map 采样,什么是阴影 acne(纹波/摩尔纹) 和 peter-panning(悬空阴影)
  • Windows Subsystem for Android在Windows 10的技术实现与架构解析
  • C++数据成员指针
  • 分人群AI建站工具解决方案:找到最适合你的建站模式
  • 不止是路径线:深入LineRenderer材质UV动画,打造更生动的游戏反馈效果
  • 松下Panasonic 伺服调试 软件 支持MINAS-A A3 A4 B E S 英文版
  • 告别Anchor Boxes!用PyTorch从零实现CenterNet目标检测(附ResNet50主干代码详解)
  • 如何在Windows 10上解锁完整安卓应用生态?终极解决方案来了!
  • AGI科研加速器全栈拆解,深度解析SITS2026披露的4层推理增强架构与2类不可替代性瓶颈
  • Flutter 三方库 serial 的鸿蒙化适配指南—如何在在鸿蒙系统上构建极致、稳定的 Web 串口通信与工业硬软连接实战
  • 总结篇:提示词能力进阶指南
  • 告别卡顿!用C++手搓一个Minimum Snap轨迹生成器,让机器人丝滑过弯
  • Redux DevTools:现代前端开发的调试革命,如何提升3倍调试效率
  • 【AGI终极认知指南】:20年AI架构师拆解大模型与AGI的5大本质鸿沟,99%从业者至今混淆
  • 如何安全升级SillyTavern LLM前端系统
  • NVIDIA Profile Inspector 终极指南:5步快速解决显卡配置应用失败问题
  • 洛雪音乐助手:完全免费的多平台音乐聚合神器,3分钟上手全攻略
  • MinerU_安装部署完全指南
  • 国内专业沉井施工单位推荐——瑞联建设,以专业实力筑牢地下工程 - 中媒介
  • WeMod增强器终极指南:三步免费解锁专业版完整功能
  • 【聚焦制造】结构件与注塑PA6尼龙调湿箱推荐:专注高精度温湿控制的实力厂家 - 品牌推荐大师
  • 保姆级教程:用Python复现CISCN2018 Java密码题,手把手教你写base36转换与多线程爆破脚本
  • Wan2.2-I2V-A14B商业设计:将UI/UX设计稿自动转化为交互原型视频
  • Matlab半对数图实战:semilogx函数从基础到高阶应用解析
  • abinit学习日记二十二——tgw2_3.abi
  • 2026 洗车店数字化管理深度测评:记络软件汽车美容版 —— 从收银、会员到运营的全场景解决方案 - 记络会员管理软件
  • 1. VMware安装Ubuntu 24.04 LTS(图文分享)
  • SQL Server 2022在Win11安装失败?可能是这个隐藏的区域设置坑(避坑指南)