【Java】Spring Boot下的MVC
文章目录
- Spring MVC程序开发
- 1. 什么是Spring MVC?
- 1.1 MVC定义
- 1.2 MVC 和 Spring MVC 的关系
- 2. 为什么学习Spring MVC?
- 3. 怎么学习Spring MVC?
- 3.1 Spring MVC的创建和连接
- 3.1.1 创建Spring MVC项目
- 3.1.2 @RequestMapping 注解介绍
- 3.1.3 @RequestMapping是post 还是 get请求?
- 3.1.4 @GetMapping 和 @PostMapping
- 3.2 获取参数
- 3.2.1 传递单个参数
- 3.2.2 传递对象
- 3.2.3 表单参数传递/传递多个参数
- 3.2.4 后端参数重命名
- 3.2.5 设置参数必传
- 3.2.6 @RequestBody接收JSON对象
- 3.2.7 获取URL当中的参数@PathVarible
- 3.2.8 上传文件@RequestPart
- 3.2.9 获取Cookie/Session/header
- 3.3 返回数据
- 3.3.1 返回静态页面
- 3.3.2 请求转发和请求重定向
- 3.3.3 @ResponseBody说明
Spring MVC程序开发
1. 什么是Spring MVC?
Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称是“Spring Web MVC”来自其原模块的名称,但是它通常被称为“Spring MVC”
从上述定义我们可以看到两个信息:
- Spring MVC 是一个Web框架
- Spring MVC 是基于Servlet API构建的
然而要真正的搞懂Spring MVC?我们要先理解什么是MVC?
1.1 MVC定义
MVC是Model、View、Controller的缩写,它是软件工程当中的一种软甲架构模式,它把软件系统分为模型、视图、和控制器三个基本部分

- Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据
- View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的
- Controller(控制器)是应用程序处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
1.2 MVC 和 Spring MVC 的关系
MVC是一种思想,而Spring MVC是对MVC思想的具体实现
总结来说,Spring MVC是实现了一个MVC模式,并继承了Servlet API的Web框架。既然是Web框架,那么用户在浏览器当中输入URL之后,我们的Spring MVC项目就可以感知到用户的请求
2. 为什么学习Spring MVC?
现在绝大部分的Java项目都是基于Spring或者是(Spring Boot)的,而Spring的核心是Spring MVC也就是说Spring MVC是Spring框架的一个核心模块,而Spring Boot是Spring的脚手架。因此我们可以推断出,现在市面上的绝大部分Java项目约等于Spring MVC项目,这就是学习它的原因
在创建Spring Boot项目的时候,我们勾选的Spring Web框架其实就是Spring MVC框架,

简单来说,咱是所以要学习Spring MVC是因为它是一切项目的基础,我们以后创建的Spring、Spring Boot项目都是基于Spring MVC的
3. 怎么学习Spring MVC?
学习Spring MVC我们只需要掌握3个功能:
- 连接的功能:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用我们的Spring程序
- 获取参数的功能:用户访问的时候会带一些参数,在程序中要想办法获取到参数
- 输出数据的功能:执行了业务逻辑之后,要把程序执行的结果返回给用户
3.1 Spring MVC的创建和连接
Spring MVC项目创建和Spring Boot项目创建相同(Spring MVC 和Spring Boot的方式相同)在创建的时候选择Spring Web就相当于创建了Spring MVC项目
在Spring MVC当中使用@RequestMapping来实现URL路由映射,也就是浏览器连接程序的作用
3.1.1 创建Spring MVC项目
创建Spring Boot项目的时候勾选上Spring Web模块即可
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("sayhi")@ResponseBodypublic String sayHi() {return "你好 世界";}
}
实现之后访问地址:http://localhost:8080/user/sayhi就可以访问了
3.1.2 @RequestMapping 注解介绍
@RequestMapping是Spring Web应用程序当中最常被用的注解之一,它是用来注册接口的路由映射的
路由映射:所谓的路由映射指的是,当用户访问一个URL时,将用户的请求对应到程序中某个类的某个方法的过程就叫做路由映射
@RequestMapping的基础使用
package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("sayhi")@ResponseBodypublic String sayHi() {return "你好 世界";}@ResponseBody@RequestMapping(method = RequestMethod.POST, value = "/sayhi2")public String sayHi2() {return "你好,世界";}
}
@RequestMapping既可以就是类,也可以修饰方法,当修饰类和方法的时候,访问的地址是类 + 方法
3.1.3 @RequestMapping是post 还是 get请求?
经过测试之后,我们可以发现是都可以支持的
我们可以指定方法类型

3.1.4 @GetMapping 和 @PostMapping
三种实现方式:
@RequestMapping("sayhi")
@ResponseBody
public String sayHi() {return "你好 世界";
}@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/sayhi2")
public String sayHi2() {return "你好,世界";
}@ResponseBody
@PostMapping("/sayhi3")
public String sayHi3() {return "你好,世界3 ";
}
3.2 获取参数
3.2.1 传递单个参数
在Spring MVC中可以直接用方法中的参数来实现传参,比如以下代码
@ResponseBody
@RequestMapping("/getuserinfoid")
public UserInfo getUserInfoId(Integer id) {UserInfo userInfo = new UserInfo();userInfo.setId(id);userInfo.setName("张三");userInfo.setAge(18);userInfo.setPassword("1234");return userInfo;
}
访问的结果是:

3.2.2 传递对象
Spring MVC可以自动实现参数对象的赋值
@ResponseBody
@RequestMapping("/reg")
public UserInfo reg(UserInfo userInfo) {return userInfo;
}
3.2.3 表单参数传递/传递多个参数
@ResponseBody
@RequestMapping("/login")
public String login(String name, String password) {return "name: " + name + "password: " + password;
}
3.2.4 后端参数重命名
某些情况下,前端传递的参数key和后端接收的key可以不一致
@ResponseBody
@RequestMapping("/login")
public String login(@RequestParam(name = "username")String name, String password) {return "name: " + name + "password: " + password;
}
3.2.5 设置参数必传
默认情况下,是必须要传递的,
我们可以设置成非必传参数
如果我们的实际业务前端的参数是一个非必传参数,我们可以这样操作

3.2.6 @RequestBody接收JSON对象

如果没有加上这一个注解,就会接收不到

3.2.7 获取URL当中的参数@PathVarible
代码实现:
@RequestMapping("/hero/{id}/{name}")
public String getHeroInfo(@PathVariable String id, @PathVariable String name) {return "id" + id + "name" + name;
}
地址填写方法:

3.2.8 上传文件@RequestPart
@RequestMapping("/upimg")
public boolean upImg(Integer uid, @RequestPart("img") MultipartFile file) {boolean result = false;String fileName = file.getOriginalFilename();// 得到图片名字fileName = fileName.substring(fileName.lastIndexOf(".")); // 得到后缀fileName = UUID.randomUUID().toString() + fileName;try {file.transferTo(new File ("D://"));result = true;} catch (IOException e) {e.printStackTrace();log.error("上传错误" + e.getMessage());}return result;
}
3.2.9 获取Cookie/Session/header
获取cookie:
@ResponseBody
@RequestMapping("/cookie")
public String getCookie(@CookieValue("bit") String bite) {return bite;
}
获取header:
使用注解:@RequestHeader
Session的存储和获取:
Session的存储我们只能使用传统的方式,但是Session的获取我们可以使用注解完成@SessionAttribute
3.3 返回数据
3.3.1 返回静态页面

这时候如果要返回一个“hello.html”,这时候返回的是一个同名的页面。所以我们在使用的时候都要加上一个注解ResponseBody
这里我们设置一个实用的技巧:热部署



3.3.2 请求转发和请求重定向
forward VS redirect
return 不但可以返回一个视图,还可以实现跳转,跳转的方式有两种:
- forward 是请求转发
- redirect 请求重定向
“转发”和“重定向”的理解:在中国官方发布的内容越少事情越大,“转发”和“重定向“也是一样:字越少,责任越大。转发是服务器帮忙转发的,而重定向是让浏览器重新请求另一个地址
具体区别如下:
- 请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发
- 请求重定向地址发生变化,请求转发地址不发生变化
- 请求重定向与直接访问新地址效果一致,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成外部资源不能访问
3.3.3 @ResponseBody说明
@ResponseBody返回的值如果是字符会变成text/html,如果是对象会转成appllcation/json返回给前端
@ResponseBody可以用来修饰方法或者修饰类,修饰类表示类中的所有方法都会返回html或者JSON而不是视图
相关文章:
【Java】Spring Boot下的MVC
文章目录Spring MVC程序开发1. 什么是Spring MVC?1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC?3. 怎么学习Spring MVC?3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…...
【项目精选】 塞北村镇旅游网站设计(视频+论文+源码)
点击下载源码 摘要 城市旅游产业的日新月异影响着村镇旅游产业的发展变化。网络、电子科技的迅猛前进同样牵动着旅游产业的快速成长。随着人们消费理念的不断发展变化,越来越多的人开始注意精神文明的追求,而不仅仅只是在意物质消费的提高。塞北村镇旅游…...
十、Spring IoC注解式开发
1 声明Bean的注解 负责声明Bean的注解,常见的包括四个: ComponentControllerServiceRepository Controller、Service、Repository这三个注解都是Component注解的别名。 也就是说:这四个注解的功能都一样。用哪个都可以。 只是为了增强程序…...
Linux系统GPIO应用编程
目录应用层如何操控GPIOGPIO 应用编程之输出GPIO 应用编程之输入GPIO 应用编程之中断在开发板上测试GPIO 输出测试GPIO 输入测试GPIO 中断测试本章介绍应用层如何控制GPIO,譬如控制GPIO 输出高电平、或输出低电平。应用层如何操控GPIO 与LED 设备一样,G…...
手敲Mybatis-反射工具天花板
历时漫长的岁月,终于鼓起勇气继续研究Mybatis的反射工具类们,简直就是把反射玩出花,但是理解起来还是很有难度的,涉及的内容代码也颇多,所以花费时间也比较浩大,不过当了解套路每个类的功能也好,…...
Java -数据结构,【优先级队列 / 堆】
一、二叉树的顺序存储 在前面我们已经讲了二叉树的链式存储,就是一棵树的左孩子和右孩子 而现在讲的是:顺序存储一棵二叉树。 1.1、存储方式 使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。 一般只适合表示完全二叉树&a…...
Python+Qt指纹录入识别考勤系统
PythonQt指纹录入识别考勤系统如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对<<PythonQt指纹录入识别考勤系统>>编写代码,代码整洁,规则,易读。 学…...
K_A14_004 基于STM32等单片机驱动旋转角度传感器模块 串口与OLED0.96双显示
K_A14_004 基于STM32等单片机驱动旋转角度传感器模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC旋转角度传感器模块1.2、STM32F103C8T6旋转角度传感器模块五、…...
2023年全国最新机动车签字授权人精选真题及答案12
百分百题库提供机动车签字授权人考试试题、机动车签字授权人考试预测题、机动车签字授权人考试真题、机动车签字授权人证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.注册登记前所有机动车都应进行安全技术检验。 答案…...
Linux小黑板(10):信号
我们写在linux系统环境下写一个程序,唔,"它的功能是每隔1s向屏幕打印hello world。"这时,我们在键盘上按出"Ctrl C"后,进程会发生什么??我们清晰地看到,进程已经在我们按出"Ctrl…...
GO 语言基础语法一 (快速入门 Go 语言)
Go语言基础语法一. golang 标识符,关键字,命名规则二. golang 变量三. golang 常量四. golang 数据类型五. golang 布尔类型六. golang 数字类型七. golang 字符串1. go语言字符串字面量2. go语言字符串连接(1). 使用加号(2). 使用 fmt.Sprintf() 函数(3…...
Java高效率复习-SpringMVC[SpringMVC-2]
SpringMVC获取请求参数 SpringMVC获取请求参数的两种方式↓ 通过ServletAPI获取请求参数 将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 通过request的API——getParameter(String s)方法来获取…...
【前端】一个更底层库-React基础知识点
目录Reat是什么?为什么要使用React类库比较容易学习,API非常少。组件内聚,容易组合原生组件和自定义组件融合渲染状态/属性驱动全局更新commonjs生态圈/工具栏完善React基础知识JSX概述JSX嵌入变量Event事件组合组合CHILDREN总结大家好&#…...
C++ 之枚举类型
文章目录参考描述枚举类型枚举类型枚举变量的声明及定义细节枚举常量的默认初始值枚举常量不可被修改赋值运算枚举常量与数据类型为枚举常量指定数据类型可选择的数据类型特殊的 Bool强枚举类型命名冲突强枚举类型参考 项目描述菜鸟教程C 枚举类型详解精通C (第九版…...
软件测试用例(3)
按照测试对象划分: 一)界面测试: 1)软件只是一种工具,软件和人的信息交流是通过界面来进行的,界面是软件和用户交流的最直接的一层,界面的设计决定了用户对于我们设计软件的第一映像,界面如同人的面孔,具有最吸引用户的…...
Spring——Bean管理-注解方式进行属性注入
Spring针对Bean管理中创建对象提供的注解有哪些?Component:普通Service:业务逻辑层Controller:controller层Repository:dao层用注解的方式是为什么?简化xml方式开发,只需要注解就可以完成在配置…...
【设计模式之美 设计原则与思想:设计原则】20 | 理论六:我为何说KISS、YAGNI原则看似简单,却经常被用错?
上几节课中,我们学习了经典的 SOLID 原则。今天,我们讲两个设计原则:KISS 原则和 YAGNI 原则。其中,KISS 原则比较经典,耳熟能详,但 YAGNI 你可能没怎么听过,不过它理解起来也不难。 理解这两个…...
Java代码弱点与修复之——Copy-paste error(复制粘贴错误)
弱点描述 Copy-paste error,复制粘贴错误。 是指在复制和粘贴代码时产生的错误。这种错误通常是由于程序员在复制代码时未正确编辑所复制的代码或编辑复制后的代码时忘记更改一些值或参数而导致的。复制粘贴错误可能会导致程序逻辑错误、编译错误或运行时错误。 示例代码 …...
Editor.md 的使用方法及图片处理
目录1. 资源下载2. 生成页面2.1 编辑和预览页面2.2 文本渲染页面3. 图片上传3.1 前端配置3.2 后端接口4. 图片粘贴[^2]1. 资源下载 官网下载 gitee 下载 2. 生成页面 2.1 编辑和预览页面 将资源(精简后 Editor.md 资源1)导入项目: 按照官…...
剑指 Offer II 018. 有效的回文
题目链接 剑指 Offer II 018. 有效的回文 easy 题目描述 给定一个字符串 s,验证 s是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的 回文串 。 示例 1: 输入: s “A man, a plan, …...
H5扫码不止‘扫一扫’:深入聊聊vue-qrcode-reader的闪光灯、相册选择和画框绘制这些高级玩法
H5扫码不止‘扫一扫’:深入聊聊vue-qrcode-reader的闪光灯、相册选择和画框绘制这些高级玩法 扫码功能早已成为移动端应用的标配,但大多数开发者止步于基础调用,忽略了用户体验的精细打磨。当产品经理提出"不仅要能用,还要好…...
OpenClaw配置备份指南:Qwen3-4B模型参数迁移方案
OpenClaw配置备份指南:Qwen3-4B模型参数迁移方案 1. 为什么需要配置备份 上周我的主力开发机突然硬盘故障,导致辛苦配置了两个月的OpenClaw环境全部丢失。最痛苦的不是重装软件,而是那些精心调试的模型参数、飞书机器人凭证和自定义技能配置…...
OpenClaw安全实践:用SecGPT-14B自动生成每周漏洞简报
OpenClaw安全实践:用SecGPT-14B自动生成每周漏洞简报 1. 为什么需要自动化漏洞简报 作为安全工程师,每周手动整理CVE漏洞报告已经成为我的例行工作。这个过程通常需要: 从NVD、CVE Details等平台爬取最新漏洞数据人工筛选高风险条目评估影…...
OpenClaw跨平台控制:Qwen3.5-9B管理多台电脑
OpenClaw跨平台控制:Qwen3.5-9B管理多台电脑 1. 为什么需要跨设备自动化管理 去年夏天,我同时处理三个项目时遇到了一个典型问题:每天需要在三台不同电脑上重复执行数据同步、日志收集和报告生成。手动操作不仅耗时,还经常遗漏步…...
HGD运动想象脑电数据集预处理实战:从数据加载到特征标准化
1. HGD数据集简介与下载指南 HGD(High Gamma Dataset)是目前运动想象脑电研究领域最常用的公开数据集之一,由德国柏林工业大学团队采集并开源。这个数据集包含了14名受试者在执行左手、右手、脚部和休息四种运动想象任务时的高密度脑电信号&a…...
三相离网逆变器在不对称负载下的正负序控制Matlab仿真探索
三相离网逆变器在不对称负载下的正负序控制matlab仿真: 1不对称控制包括: 正序分量处理负序分量处理正序控制环负序控制环; 2正序控制换路与负序控制换路都采用dq轴上的电容电压外环电感电流内环控制; 3直流电压Vdc700V,总功率15kWÿ…...
OpenClaw+Qwen3-14b_int4_awq:跨平台文件同步助手
OpenClawQwen3-14b_int4_awq:跨平台文件同步助手 1. 为什么需要智能文件同步 上周我差点犯了个职场大错——把包含客户联系方式的Excel表格同步到了公共网盘。这件事让我意识到:传统的文件同步工具就像个"搬运工",它分不清哪些文…...
OpenClaw社交媒体管理:Gemma-3-12b-it自动回复评论与生成周报
OpenClaw社交媒体管理:Gemma-3-12b-it自动回复评论与生成周报 1. 为什么选择OpenClaw管理社交媒体 去年运营个人技术账号时,我每天要花1小时手动回复评论和整理周报。直到发现OpenClaw这个开源自动化框架,配合Gemma-3-12b-it模型࿰…...
04_RAGFlow之知识图谱与Text2SQL
RAGFlow之知识图谱与Text2SQL:构建智能检索的双引擎 知识体系结构 RAGFlow技术栈 │ ├── 知识图谱层 │ ├── 实体识别与关系提取(NER Relation Extraction) │ ├── 图谱查询与推理(Graph Query & Reasoning&a…...
如何用免费工具3步完成华硕游戏本终极性能调校:完整指南
如何用免费工具3步完成华硕游戏本终极性能调校:完整指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...
