news 2026/4/18 18:54:59

Spring MVC 01

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 18:54:13

ncmdumpGUI:解锁网易云音乐NCM加密文件的终极免费方案

ncmdumpGUI&#xff1a;解锁网易云音乐NCM加密文件的终极免费方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经在网易云音乐下载了心爱的歌曲&am…

作者头像 李华
网站建设 2026/4/18 18:52:28

小猫爪:嵌入式实战笔记11-ARM MPU配置避坑与异常调试

1. ARM MPU配置的五大常见陷阱 第一次在RTOS项目里启用MPU时&#xff0c;我遭遇了连续三天的HardFault轰炸。后来发现是Region地址没对齐导致的——这个看似简单的错误&#xff0c;却是新手最容易踩的坑。MPU作为内存保护的守门员&#xff0c;配置不当轻则导致异常&#xff0c;…

作者头像 李华
网站建设 2026/4/18 18:51:39

宝宝补铁剂十大品牌排行榜揭晓

一、童年时光铁维滴品牌热度&#xff1a;★★★★★美国知名品牌&#xff0c;专注儿童营养多年。市场占比&#xff1a;在海淘妈妈群体中很受欢迎&#xff0c;年销量可观。上榜理由&#xff1a;滴剂形式方便宝宝服用&#xff0c;味道相对容易接受。推荐第1款&#xff1a;童年时光…

作者头像 李华
网站建设 2026/4/18 18:51:13

Linux ALSA音频驱动三:DAPM动态通路与功耗优化

1. DAPM是什么&#xff1f;为什么需要动态音频通路管理 第一次接触Linux音频驱动开发时&#xff0c;我对着CODEC芯片手册里密密麻麻的寄存器配置头大如斗。每个音频模块的开关、每个信号通路的切换都需要手动配置寄存器&#xff0c;稍有不慎就会导致无声、杂音甚至硬件损坏。直…

作者头像 李华
网站建设 2026/4/18 18:47:15

Blender3mfFormat:专业级3D打印工作流解决方案

Blender3mfFormat&#xff1a;专业级3D打印工作流解决方案 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender3mfFormat是一款专为Blender设计的开源插件&#xff0c…

作者头像 李华