一文带你迅速入门SprIngMVC,看这一篇就足够了!
0. 什么是SpringMVC
要知道什么是SpringMVC,我们首先得知道什么 MVC,MVC是软件工程中的一种架构模式,分为 Model、View、Control。它把软件系统分为模型、视图和控制器三个基本部分。

- Model:模型,应用程序负责数据逻辑部分,在数据库中存取数据。
- View:视图,应用程序中处理数据显示部分,是根据模型数据创建的。
- Control:控制器,应用程序处理用户交互的部分,负责从视图读取数据,控制用户输入向模型发送数据。
MVC执行流程:
1. 用户请求先发给 Control
2. Control 将请求转发给 Model
3. Model 处理业务将数据返回给 Control
4. Control 将数据给 View 引擎
5. View 转换数据生成最终页面给用户
SpringMVC 是一个框架,是基于 Servlet API 构建的。
SpringMVC 和 MVC 的关系,MVC是一种思想,就像IOC一样;SpringMVC是具体的一种实现了MVC的模式(就像DI一样),并继承了Servlet API 的Web框架。
1. SprinMVC学什么?
要想快速上手 SpringMVC,只需要掌握三个功能:
- 连接功能:将用户(浏览器)和 Java程序连接起来,让我们可以在浏览器输入一个网址就能调用我们的程序
- 获取参数功能:当用户访问的时候,会携带一些参数,我们需要在程序中获取这些参数
- 输出数据的功能:我们需要将用户需要的结果反馈给用户
1.1 实现连接功能
实现连接功能,我们最常用的请求方式就是 Get 请求和 Post 请求
1.11 @RequestMapping
@RequestMapping 是 Spring Web 程序中最常用到的注解之一,用户注册接口的路由映射。路由映射:当用户访问一个 url 时,将用户的请求对应到应用程序中的某个类的某个方法的过程。
- 可以修饰类也可以修饰方法

当你成功启动项目是,如果需要访问的 getUserById这个方法的时候,在浏览器中输入 localhost:8080/user/getuserbyid。这里的端口号是默认的8080。
@RequestMapping是同时支持 GET 和 POST请求。
1.12 @GetMapping
只适用于 GET 请求

1.13 @PostMapping
只适用于POST请求

1.2 获取参数功能
1.21 获取单个参数
正确示例:

错误示例:

出现上述错误的时候,我们可以通过一个注解,就能解决 url 中参数的 key 和 方法中 形参名不一致导致的问题。 @RequestParam(“xxxx”)这个注解

注意点:使用了@RequestParam注解的参数必须设置值

1.22 获取多个参数
当获取多个参数的时候,顺序并不重要。

1.23 获取一个对象

1.24 获取一个 Json 对象(此时需要的注解是@RequestBody)
我们可以通过 Postman来传入一个 Json 格式的数据,在方法上的参数中,加上@RequestBody注解,表示我们获取的参数是 json 格式的数据。

1.25 获取URL中参数
可以使用注解@PathVariable,获取url地址中的参数

这里有个提示,如果你设置参数,就必须在前端传入,否则就会发生错误

1.26 上传文件(@RequestPart)
使用的@RequestPart注解,可以上传文件,可以参考以下代码
@RequestMapping("/upload")public String upLoad(@RequestPart MultipartFile file) throws IOException {// 1.生成一个唯一的id | UUID = 全球唯一ID -> MAC + 随机种子 + 加密算法String name = UUID.randomUUID().toString().replace("-", "");// 2.得到源文件的后缀名name += (file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")));String path = "D:\\image\\" + name;// 保存文件file.transferTo(new File(path));return path;}
通过 Postman 测试,可以成功上传

1.27 获取Cookie(@CookieValue)
@RequestMapping("getcookie")public String getCookie(@CookieValue(value = "java",required = false) String cookie){return cookie;}

1.28 获取Session(@SessionAttribute)
先设置一个Session
private static String _SESSION_KEY = "SESSION_KEY";@RequestMapping("/set_sess")public String setSess(HttpServletRequest request) {HttpSession session = request.getSession();if (session != null) {session.setAttribute(_SESSION_KEY, "张三");return "session set success";} else {return "session set fail";}}
然后获取Session
@RequestMapping("/get_sess")public String getSess(@SessionAttribute(required = false, value = "SESSION_KEY") String name) {return name;}

1.3 返回数据功能
1.31 非静态页面数据(text/html)
在上述中,我们返回的都是数据,可以看到我们加了一个 @ResponseBody,这个注解作用就是表示返回的是非静态页面的数据。

1.32 非静态页面数据(json)

1.32 静态页面数据
–
当需要返回的是静态页面的时候,就不需要加 @ResponseBody这个注解

2. foward vs redirect 区别
在返回数据的时候,不仅可以返回一个视图,还可以实现跳转,跳转的方式有两种:
- forward : 请求转发
- redirect:请求重定向
两者有什么区别呢?
-
- 请求转发是由服务器转发的;请求重定向是将请求重新定位到资源
-
- 请求转发地址不发生变化;请求重定向地址发生变化
-
- 请求转发由服务器转发,可能会造成原外部资源访问不到;请求重定向和访问新地址一样,不会出现这种情况
相关文章:
一文带你迅速入门SprIngMVC,看这一篇就足够了!
0. 什么是SpringMVC 要知道什么是SpringMVC,我们首先得知道什么 MVC,MVC是软件工程中的一种架构模式,分为 Model、View、Control。它把软件系统分为模型、视图和控制器三个基本部分。 Model:模型,应用程序负责数据逻…...
js路由跳转时放弃正在pending的请求
在单页面应用中通常会对请求进行catch处理,如果用户打开a页面后页面发出了一个请求去获取aaa,但是由于某种原因请求一直在pending。此时用户又进入了b页面,在浏览时a页面的请求失败了,然后页面弹出提示:“数据aaa请求失…...
LeetCode(sql)-0723
聚合函数 620 select * from cinema where mod(id,2)1 and description <> boring order by rating desc1251 select p.product_id, Round(sum(price*units)/sum(units),2)as average_price from UnitsSold u left join Prices p using(product_id) where purchase_d…...
【C++】开源:grpc远程过程调用(RPC)配置与使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍grpc远程过程调用(RPC)配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜…...
rabbitmq模块启动报java.net.SocketException: socket closed的解决方法
问题 最近在接手一个项目时,使用的是spring-cloud微服务构架,mq消息消费模块是单独一个模块,但启动这个模块一直报如下错误: java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错,刚开…...
uni-app 中定时器的使用
学习目标: 学习目标如下所示: uniapp中通过使用uni-app提供的定时器API来实现定时器功能。 学习内容: 内容如下所示: **uni-app的定时器API分为两种: 1.第一种方式: setTimeout函数,用于设置一…...
基于物联网、视频监控与AI视觉技术的智慧电厂项目智能化改造方案
一、项目背景 现阶段,电力行业很多企业都在部署摄像头对电力巡检现场状况进行远程监控,但是存在人工查看费时、疲劳、出现问题无法第一时间发现等管理弊端,而且安全事件主要依靠人工经验判断分析、管控,效率十分低下。 为解决上述…...
内网穿透远程查看内网监控摄像头
内网穿透远程查看内网监控摄像头 在现代社会中,大家总是奔波于家和公司之间。大部分时间用于工作中,也就很难及时知晓家中的动态情况,对于家中有老人、小孩或宠物的(甚至对居住环境安全不放心的),这已然是…...
【Flume 01】Flume简介、部署、组件
1 Flume简介 Flume是一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统 主要特性: 它有一个简单、灵活的基于流的数据流结构(使用Event封装)具有负载均衡机制和故障转移机制一个简单可扩展的数据模型(Source、Channel、Sink) Sou…...
三款即时通讯工具推荐:J2L3x、Telegram、WhatsApp 你选哪个?
1、J2L3x J2L3x 是一款受欢迎的即时通讯工具,广泛应用于企业团队之间的沟通和协作。它提供了多种通讯方式,包括群组聊天、私人消息和文件共享等,还可以方便地与其他应用程序和服务集成。即使你不在工作场所,你也可以在任何地方使…...
C++ 单例模式(介绍+实现)
文章目录 一. 设计模式二. 单例模式三. 饿汉模式四. 懒汉模式结束语 一. 设计模式 单例模式是一种设计模式 设计模式(Design Pattern)是一套被反复使用,多数人知晓的,经过分类的,代码设计经验的总结。 为什么要有设计模式 就像人类历史发展会…...
uniapp项目集成本地插件
在项目根目录下创建nativeplugins文件夹 拷贝插件到目录nativeplugins 在manifest.json -> App原生插件配置 -> 本地插件里勾选插件 删除本地基座和手机app从新自定义基座运行...
MFC CList 类的使用
MFC提供CList 类; 类CList支持可按顺序或按值访问的非唯一对象的有序列表;CList 列表与双链接列表行为相似; 类型POSITION的变量是列表的关键字;可使用POSITION变量作为循环因子来顺序遍历列表,作为书签来保存位置&am…...
iptable防火墙
防火墙 防火墙的主要功能是隔离,决定数据是否可以被外网访问以及哪些数据可以进入内。 它主要部署在网络边缘或者主机边缘,应用在网络层。 防火墙的安全技术: 1、入侵检测系统:检测数威胁,病毒,木马,不…...
二、SQL-5.DQL-9).执行顺序
一、案例: 查询年龄大于15的员工的姓名、年龄,并根据年龄进行升序排序 select name, age from emp where age > 15 order by age asc; 先执行①from(定义emp的别名为e),再执行②where(调用别名e&…...
Ubuntu通用镜像加速配置
备份 cp -rf /etc/apt/sources.list /etc/apt/sources.list.bak开始配置 阿里云 sed -i shttp://archive.ubuntu.comhttps://mirrors.aliyun.comg /etc/apt/sources.listsed -i shttp://security.ubuntu.comhttps://mirrors.aliyun.comg /etc/apt/sources.list清华源 sed -i …...
Linux安装部署Nacos和sentinel
1.将nacos安装包下载到本地后上传到linux中 2.进入nacos的/bin目录,输入命令启动nacos [rootlocalhost bin]# sh startup.sh -m standalone注:使用第二种方式启动,同时增加日志记录的功能 2.2 startup.sh文件是不具备足够的权限,否则不能操作 给文件赋予执行权限 [rootlocalh…...
Vue3+ElementPlus+TS实现右上角消息数量实时更新
Vue3ElementPlusTS实现右上角消息数量实时更新 背景 项目需求,前端右上角铃铛图标 显示接收到的消息通知,并且显示消息数量以及实时更新。(一般是点击操作按钮后增加一条消息通知,图标上的数字也随之更新) 【原来的想…...
去除重复字母(力扣)贪心 + 队列 JAVA
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例 1: 输入:s “bcabc” 输出:“abc” 示例 2&am…...
Spring,SpringBoot,Spring MVC的区别是什么
1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级…...
C++手动实现共享智能指针my_shared_ptr|引用计数+删除器+完整可运行代码
1.共享智能指针的概念 共享型智能指针就是做出一个像JAVA中垃圾回收器,并且可以运用到所有资源,heap内存和系统资源都可以使用的系统。 shared_ptr实现了共享所有权(shared ownership)方式来管理资源对象,这意味没有一个特定的shared_ptr拥有资源对象。相反,这些指向同一…...
LSTM预测不准?试试这个全局注意力“外挂”:一个PyTorch模块提升你的时序模型性能
LSTM预测不准?试试这个全局注意力“外挂”:一个PyTorch模块提升你的时序模型性能 当你发现精心调参的LSTM模型在预测股票价格、设备故障率或能源消耗时,总是错过关键转折点,问题可能不在你的数据清洗或超参选择——而是模型缺乏对…...
接口调用失败与重试策略详解
接口调用失败与重试策略详解 远程调用(HTTP/RPC、消息投递等)失败时,重试可提高对瞬时故障的容忍度;若设计不当,也会放大负载、拉长尾延迟或造成重复副作用。本文归纳常见退避与重试策略、与幂等/熔断/队列的配合&…...
电子电路中的“心脏”:电源
一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...
【Typst源文件】Typst 纸张定义完全指南
Typst 通过 page 函数来定义纸张的尺寸、边距、方向等属性。通常使用 #set page() 规则在文档开头进行全局设置。 1. 基础纸张设置 1.1 使用标准纸张尺寸 Typst 支持丰富的标准纸张尺寸,只需传入纸张名称字符串即可: // 设置为 A4 纸张(默…...
HARMONYOS应用实例262:函数图像变换
函数图像变换 功能:演示 y=f(x)y=f(x)y=f(x) 到...
用Matlab模拟大气湍流和相机抖动:从模糊照片到清晰图像的完整复原实战
用Matlab模拟大气湍流和相机抖动:从模糊照片到清晰图像的完整复原实战 当你在高空航拍或长焦拍摄时,是否遇到过图像模糊不清的问题?这种模糊往往源于大气湍流或相机抖动。本文将带你深入理解这些退化现象的数学模型,并手把手教你用…...
InfluxDB新手必看:从安装到基本操作的完整指南(Windows版)
InfluxDB Windows实战指南:从零搭建时序数据库系统 时序数据正成为物联网、DevOps和业务监控领域的核心资产。想象一下,您需要每秒处理数千台设备的温度读数,或者分析应用程序每分钟的性能指标——传统关系型数据库在这种高频写入场景下往往…...
NVIDIA Orin AGX 开发环境快速部署指南
1. 开箱即用:NVIDIA Orin AGX开发环境全景概览 拿到NVIDIA Orin AGX开发板的第一天,我盯着这个黑色的小盒子看了十分钟——它看起来像块普通电路板,但内核却是当前最强的边缘计算芯片之一。作为过来人,我理解新手面对这块板子时的…...
抽象推理终极指南:10个ARC经典案例解析助你掌握核心技巧
抽象推理终极指南:10个ARC经典案例解析助你掌握核心技巧 【免费下载链接】ARC-AGI The Abstraction and Reasoning Corpus 项目地址: https://gitcode.com/GitHub_Trending/ar/ARC-AGI 抽象与推理语料库(ARC)是一个专门用于评估通用人…...
