了解 spring MVC + 使用spring MVC - springboot
前言
本篇介绍什么是spring MVC ,如何使用spring MVC,了解如何连接客户端与后端,如何从前端获取各种参数;如有错误,请在评论区指正,让我们一起交流,共同进步!
文章目录
- 前言
- 1. 什么是 spring MVC ?
- 2. 了解 spring MVC 的 3个功能
- 2.1 spring MVC的连接功能
- 2.2 spring MVC 获取参数的功能
- 2.3 spring MVC 输出数据的功能 - 返回页面
- 总结
本文开始
1. 什么是 spring MVC ?
spring MVC :spring MVC 是一个 基于 Servlet API 构建 的 Web框架;(spring MVC == spring Web MVC)=》使用spring MVC,客户端就能通过请求能与后端进行交互;
为什么要认识MVC?
MVC是一种思想,而spring MVC 是 MVC思想的实现;
认识MVC:
MVC: 英文 Model View Controller - 模型视图控制器,一种软件架构模式;
MVC 执行流程:(用户请求,经过Controller + Model + View处理,将结果返回前端页面的过程)
① 用户请求首先到 Controller
② Controller 将请求转发给Model
③ Model 处理业务并将数据结果返回给 Controller
④ Controller 将数据给 View 引擎
⑤ View 转换数据生成最终页面给用户;
2. 了解 spring MVC 的 3个功能
2.1 spring MVC的连接功能
spring MVC 连接:将浏览器(客户端)与程序连接起来;- 通过请求能调用spring程序;
如何连接客户端 与 程序呢?
方式一:通过注解 @RequestMapping() 实现路由(也就是访问路径);
【注】
@RequestMapping()可修饰类 和 修饰方法;
- @RequestMapping的参数就是路由,格式为:“/xxx”;
修饰类为一级路由,修饰方法为二级路由;- @RequestMapping支持请求类型:多种类型包括 post + get; (其他类型不介绍了,这两种是常用类型)
- 设置后端接收的请求类型:例如:修改@RequestMapping,让java程序只支持post请求:
@RequestMapping(path=“/test”, method = RequestMethod.POST)
方式二:通过@GetMapping() - 只支持get请求,写在方法上
使用方式:@GetMapping(“/xxx”)
通过@PostMapping() - 只支持post请求
使用方式:@PostMapping(“/xxx”)
2.2 spring MVC 获取参数的功能
spring MVC 获取参数:从请求中获取参数;
- 获取单个参数:
保证代码的参数与请求参数的key值一样就行,代码中的值就会自带注入获取参数
【注】参数名字:不用使用小驼峰的形式(不用出现大写字母)因为Linux不支持,但可以使用下滑线连接;(例如:user_name)
保证key值一样:框架会自带动注入参数值;
- 获取多个参数:只是在()中添加即可,但要保证key值与请求传入的key一样;
@RequestMapping("/name2")public String getName(String name, Integer age) {return "Name: " + name +" "+ "age: " + age;}
- 获取对象:前端传递的请求,后端获取参数时框架会根据 对象中的属性值 与 请求中的key值相比较,如果属性值 == 请求中的key值,就会赋值给属性,没有的使用默认值;
【注】可以避免之后的代码一直添加参数,而一直修改代码,使用对象获取参数可以不用修改参数,修改对象即可;
- 修改前端传递的参数名称:修改注释为@RequestParam(), value中为前端参数值,required 是 设置非必传参数,设置了就可以不用传了;
@RequestMapping("/age")public int a(@RequestParam(value = "a", required = false) String age) {return age;//修改后端名称就可以在此方法中使用了;}
- 获取前端Json对象:通过注释@RequestBody,获取前端Body中的json数据;
@RequestMapping("/json")public User addJson(@RequestBody User user) {return user;}
- 获取前端URL中非queryString部分的参数:通过注释@PathVariable获取
//{}来装要获取的参数:{}中的名称a 与 方法中的名称aid不一样,就需要使用();@RequestMapping("/article/{a}")public Integer article(@PathVariable("a") Integer aid) {return aid;}//如果{}中的参数名称 与方法中设置的名称一样,就可以省略();如下:@RequestMapping("/article2/{aid}/{name}")public String article2(@PathVariable Integer aid ,@PathVariable String name) {return "id: " + aid + " " + "name: " + name;}
获取的aid==234
- 获取文件:使用注释@RequestPart()
@RequestMapping("/upload")public String upload(@RequestPart("my_file")MultipartFile file) throws IOException {//1.生成一个UUid: 全球唯一IDString name = UUID.randomUUID().toString().replace("-", "");//2.得到源文件的后缀: 从.后开始截取;name += (file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));String path = "D:\\File_Test\\" + name;//3.保存文件file.transferTo(new File(path));return path;}
- 获取 cookie 和 session 和 Header:通过注释@CookieValue, @SessionAttribute, @RequestHeader
//获取cookie
//value参数: 是cookie的名称;required: 是设置非必须参数;@RequestMapping("/get_cookie")@ResponseBodypublic String getCookie(@CookieValue(value = "test_cookie", required = false)String cookie) {return cookie;}
//获取session@RequestMapping("/get_session")@ResponseBodypublic String getSession(@SessionAttribute(value = "test_session",required = false)String session) {return session;}
//获取header@RequestMapping("/get_header")@ResponseBodypublic String getHeader(@RequestHeader(value = "test_Header",required = false)String header) {return header;}
2.3 spring MVC 输出数据的功能 - 返回页面
spring MVC 输出数据:将数据返回前端页面;
- 框架自动转换数据类型:springboot框架会根据要返回的数据类型,自动转换;如果能转换为json(对象与集合就可以转换json),就会转换,不能就根据类型判断,是html就返回html格式等等;
为什么使用 @Controller,还要加上@ResponseBody?
之前前后端不分离的时,使用@Controller注释,返回的是一个页面;但现在前后端分离,需要返回数据就可以,这就使用到了@ResponseBody注释,加上注释后返回的就是数据,不再是页面了;
【注】组合注释@RestController == @Controller + @ResponseBody;
forward : 请求转发 与 redirect :请求重定向
区别:
- 请求重定向 会将请求定位到新的资源;请求转发服务器端转发,不会定位新资源;
- 请求重定向地址发生变化,请求转发地址不发生变化;
- 请求重定向不存在原来外部资源不能访问,请求转发存在原来的外部资源不能访问;
示例:张三 拿钱 给 李四,让李四去买饼干,如果李四去买就是请求转发;如果李四不同意去买就是请求重定向,就需要张三自己去买;
对于原外部资源能不能访问:张三自己去买(请求重定向),买的一定是自己喜欢吃的,但是让李四去买(请求转发),不一定是张三喜欢吃的;
总结
✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!
相关文章:

了解 spring MVC + 使用spring MVC - springboot
前言 本篇介绍什么是spring MVC ,如何使用spring MVC,了解如何连接客户端与后端,如何从前端获取各种参数;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言1. 什么…...
C#中的Invoke
在 C# 中,Invoke() 是一个用于调用方法的方法,它能够在运行时动态地调用一个方法。 Invoke() 方法的使用方式有两种: 通过 MethodInfo 对象调用: using System.Reflection;namespace ConsoleApp_Invoke {public class Program{…...

Hive终端命令行打印很多日志时,如何设置日志级别
示例:use test; 切换到test数据库时,输出很多日志信息不方便看结果,如下图。 解决方法: 退出hive命令行界面(ctrlC)执行“vi /usr/local/apache-hive-3.1.2-bin/conf/log4j.properties”命令,创…...
Android的PopupWindow(详细版)
经典好文推荐,通过阅读本文,您将收获以下知识点: 一、PopupWindow简介 二、PopupWindow 的使用方法 三、底部PopupWindow的实现 四、参考文献 一、PopupWindow简介 在学习PopupWindow之前,我们先了解一下PopupWindow的继承关系。 PopupWindow继承关系如下: java.lang.Obje…...

Navicat远程连接Linux的MySQL
打开Linux终端,进入root权限,用vim打开MySQL的配置文件 vim /etc/mysql/mysql.conf.d/mysqld.cnf将bind-address的值改为0.0.0.0 进入MySQL mysql -u root -p 将root用户改为允许远程登录 update user set host % where user root; 创建用户 CRE…...

Spring IOC
◆ 传统Javaweb开发的困惑 ◆ IoC、DI和AOP思想提出 ◆ Spring框架的诞生 Spring | Home IOC控制反转:BeanFactory 快速入门 package com.xiaolin.service.Impl;import com.xiaolin.dao.UserDao; import com.xiaolin.service.UserService;public class UserServic…...
华为OD机试真题【上班之路】
1、题目描述 【上班之路】 Jungle 生活在美丽的蓝鲸城,大马路都是方方正正,但是每天马路的封闭情况都不一样。 地图由以下元素组成: 1)”.” — 空地,可以达到; 2)”*” — 路障,不可达到; 3&a…...

【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)
目录 背景资源获取bochs环境搭建windowsbochs环境搭建linux声明 背景 最近看赵炯老师的《linux内核完全注释》,然后在最后一个习题里面看到使用bochs跑一下0.11的内核代码,本来觉得很难,但是如果做过一遍就会发现其实很简单,这个…...

java+springboot+mysql个人日记管理系统
项目介绍: 使用javaspringbootmysql开发的个人日记管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;反馈管理;系统公告;个人…...
旋转图像 LeetCode热题100
题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 思路 利用矩阵性质,先反转矩阵的每一列元素,再把…...

Vue3 element-plus表单嵌套表格实现动态表单验证
Vue3结合element-plus表单项可以动态添加/删除 部分效果图如下: 另表格有添加和删除按钮,点击提交进行表单验证。 首先data格式必须是对象包裹数组 import { ref, reactive } from vue; import { FormInstance } from element-plus const froms re…...

VSCode插件Todo Tree的使用
在VSCode中安装插件Todo Tree。按下快捷键ctrlshiftP,输入setting.jspn,选择相应的配置范围,我们选择的是用户配置 Open User Settings(JSON),将以下代码插入其中。 //todo-tree 标签配置从这里开始 标签兼容大小写字母(很好的功…...

无人驾驶实战-第五课(动态环境感知与3D检测算法)
激光雷达的分类: 机械式Lidar:TOF、N个独立激光单元、旋转产生360度视场 MEMS式Lidar:不旋转 激光雷达的输出是点云,点云数据特点: 简单:x y z i (i为信号强度) 稀疏:7%&…...
Tomcat 的内存配置
修改 Tomcat 的内存配置,你需要调整 Tomcat 的 Java 虚拟机(JVM)参数。具体来说,你需要修改 catalina.sh(Linux/macOS)或 catalina.bat(Windows)脚本中的 JAVA_OPTS 变量。以下是一般…...

pycharm出现python test运行报错(pytest模式)
pycharm出现python test运行报错 一、python test 执行代码报错二、删除运行配置三、修改pycharm默认配置为 unittests四、成功! 一、python test 执行代码报错 二、删除运行配置 三、修改pycharm默认配置为 unittests 四、成功!...
JavaScript篇 this指向
文章目录 1.this 关键字2.this实质3.使用场合3.1.全局环境3.2.构造函数3.3.对象的方法 4. 使用注意4.1.避免多层 this4.2.避免数组处理方法中的 this4.3.避免回调函数中的 this 5.绑定this5.1.Function.prototype.call()5.2.Function.prototype.apply()5.3.Function.prototype.…...

操作系统复习总结1
操作系统复习总结,仅供笔者复习使用,参考教材: 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为:计算机系统概述; 计算机系…...

Matlab中图的最短路径
前言: 图的基本概念: 若想简单绘制图可以利用此网站: 左上角Undirected/Directed是无向图/有向图 左边 0-index ,1-index为0下标,1下标。 Node Count为节点个数 Graph Data:最初尾节点的名称ÿ…...
没有jodatime,rust里怎么将字符串转为日期呢?
关注我,学习Rust不迷路!! 在 Rust 中,有多种方法可以在时间和字符串之间进行转换。以下是五种常见的方式: 1. 使用 chrono 库进行转换: use chrono::{NaiveDateTime, DateTime, Utc, TimeZone};fn main(…...
【Markdown入门及使用】
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...