Spring MVC程序开发
目录
1.什么是Spring MVC?
1.1MVC定义
1.2MVC和Spring MVC的关系
2.为什么要学习Spring MVC?
3.怎么学Spring MVC?
3.1Spring 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 设置参数必传@RequestParam
3.2.6 @RequestBody 接收JSON对象
3.2.7 获取URL中参数@PathVariable
3.2.8 上传⽂件@RequestPart
3.2.9 获取Cookie/Session/header
编辑 3.2.10返回Jason对象
4.请求转发和请求重定向
1.什么是Spring MVC?
1.1MVC定义
1.2MVC和Spring MVC的关系
2.为什么要学习Spring MVC?
3.怎么学Spring MVC?
3.1Spring MVC的创建和连接
3.1.1创建Spring MVC项目
接下来,创建⼀个类,实现⽤户到 Spring 程序的互联互通,具体实现代码如下:
@Controller//让Spring框架启动时加载
@ResponseBody//返回非页面数据
@RequestMapping("/user")//路由器规则注册
public class UserController {@RequestMapping("/hi")public String sayHi(){return "hi,Spring MVC";}
} 访问地址127.0.0.1:8081/user/hi就可以打印出想要的文字:

3.1.2@RequestMapping 注解介绍
@RequestMapping的基础使用:
@Controller
@RequestMapping("/web")
public class WebController {@RequestMapping("/index")public String index(){
// return "hello,springmvc";return "/index.html";}@ResponseBody
// @RequestMapping(value = "/indexData",method = RequestMethod.POST)
// @PostMapping("/indexData")@GetMapping("/indexData")public String indexData(){return "hello,springmvc";
// return "/index.html";}
} @Controller
@ResponseBody
public class UserController1 {@RequestMapping("/hi")public String sayHi(){return "hi,Spring";}
} 3.1.3 @RequestMapping 是 post 还是 get 请求?

根据postman可以发现,@RequestMapping既有post请求,也有get请求。那如果只想要post或者get请求呢?
指定 GET/POST ⽅法类型:
public class UserController1 {@RequestMapping(value = "/hi2",method = RequestMethod.GET)public String sayHi2(){return "hi,Spring";}
} 
3.1.4 @GetMapping 和 PostMapping
//写法1
@RequestMapping("/hi2")
//写法2
@RequestMapping(value = "/hi2",method = RequestMethod.GET)
//写法3
@GetMapping("hi2") post请求的2种写法:
//写法1
@RequestMapping(value = "hi2",method = RequestMethod.POST)
//写法2
@PostMapping("hi2") 3.2 获取参数
3.2.1 传递单个参数
在 Spring MVC 中可以直接⽤⽅法中的参数来实现传参,⽐如以下代码:
@RequestMapping("/get2")public String get2(String name){return "name:"+name;} 在 postman 中访问⽅法:

3.2.2 传递对象
并且 Spring MVC 可以⾃动实现参数对象的赋值,⽐如Student对象:
@Data
public class Student {private Integer id;private String name;private Integer age;private String nickname;
}
传递对象代码实现:
@RequestMapping("/get6")public String get6(Student student){return student.toString();} 最终执行结果:

3.2.3 表单参数传递/传递多个参数(⾮对象)
@RequestMapping("/get3")public String get3(String name,Integer age){return "name:"+name+","+"age:"+age;}
3.2.4 后端参数重命名(后端参数映射)
@RequestMapping("/m4")public Object method4(@RequestParam("time") String createtime){System.out.println("时间:" + createtime);return "/index.html";} 
3.2.5 设置参数必传@RequestParam
上⾯的列⼦,如果我们是前端传递⼀个⾮ time 的参数,就会出现程序报错的情况,如下图所示:

⾮必传参数设置
@RequestMapping("/m4")public Object method4(@RequestParam(value = "time",required = false) String createtime) {System.out.println("时间:" + createtime);return "/index.html";} 3.2.6 @RequestBody 接收JSON对象

后端接收代码:
@RequestMapping("/get8")public String get8(@RequestBody Student student){log.info(student.toString());return student.toString();} 3.2.7 获取URL中参数@PathVariable
后端实现代码:
//取url地址@RequestMapping("/get9/{shopid}/{dealid}")public String get9(@PathVariable Integer shopid,@PathVariable("dealid") Integer dealId) {return "shopid:"+shopid+",dealId:"+dealId;}
字段需要保持一致,如果不一致,需要在@PathVariable设置参数的名称
3.2.8 上传⽂件@RequestPart
后端代码实现:
@RequestMapping("/get10")public String get10(@RequestPart("file") MultipartFile file) throws IOException {log.info(file.getOriginalFilename());file.transferTo(new File("D:/temp/"+file.getOriginalFilename()));return "success";}
3.2.9 获取Cookie/Session/header
后端代码实现:
使用@CookieValue注解来实现
@RequestMapping("/get11")public String grt11(@CookieValue(name = "bite1",required = false) String bite){return "bite:"+bite;}
如果cookie中不存在这个key,就会报错

我们手动设置cookie,页面就会访问成功,所以cookie是可以造假的。

获取session:
后端代码实现:
@RequestMapping("/get12")public String grt12(@SessionAttribute(required = false) String username){return "username:"+username;}
直接执行是获取不到session的,我们需要在后端中设置session
设置session:
后端代码实现:
@RequestMapping("/set1")public String set1(HttpSession session){session.setAttribute("username","bite");return "success";}
先执行这个方法,就会在前端获取到session:
session在存储时就是以键值对的方式存储的
获取header:
后端代码实现:
@RequestMapping("/get13")public String get13(@RequestHeader("User-Agent") String userAgent){return "userAgent:"+userAgent;}
3.2.10返回Jason对象
@RequestMapping("/get14")public Map<String,String> get14(){Map<String,String>map=new HashMap<>();map.put("k1","v1");map.put("k2","v2");map.put("k3","v3");map.put("k4","v4");map.put("k5","v5");return map;}

使用filder抓包:
4.请求转发和请求重定向
@Controller
@RequestMapping("/index")
public class IndexController {/*** 请求转发* @return*/@RequestMapping("/forward")public String forward(){return "forward:/index.html";}@RequestMapping("/redirect")public String redirect(){return "redirect:/index.html";}
}
使用forward不会改变url

使用redirect会改变url。

相关文章:
Spring MVC程序开发
目录 1.什么是Spring MVC? 1.1MVC定义 1.2MVC和Spring MVC的关系 2.为什么要学习Spring MVC? 3.怎么学Spring MVC? 3.1Spring MVC的创建和连接 3.1.1创建Spring MVC项目 3.1.2RequestMapping 注解介绍 3.1.3 RequestMapping 是 post 还是 get 请求? …...
医疗知识图谱问答——文本分类解析
前言 Neo4j的数据库构建完成后,现在就是要实现医疗知识的解答功能了。因为是初版,这里的问题解答不会涉及深度学习,目前只是一个条件查询的过程。而这个过程包括对问题的关键词拆解分类,然后提取词语和类型去图数据库查询…...
JS关于多张图片上传显示报错不影响后面图片上传方法
关于多张图片上传或者下载显示报错后会程序会终止执行,从而影响后面图片上传。 解决方法: /*能正常访问的图片*/ const url https://2vimg.hitv.com/100/2308/0109/5359/dqKIZ7d4cnHL/81Vu0c.jpg?x-oss-processimage/format,webp; /*不能正常下载的图…...
MySQL踩坑之sql_mode的用法
目录 定义 报错重现 编辑 原因分析 sql_mode值说明 查看当前sql_mode 设置sql_mode 定义 什么是sql_mode?玩了这么久的MySQL语句...
消息队列总结(4)- RabbitMQ Kafka RocketMQ高性能方案
1.RabbitMQ的高性能解决方案 1.1 发布确认机制 RabbitMQ提供了3种生产者发布确认的模式: 简单模式(Simple Mode):生产者发送消息后,等待服务器确认消息已经被接收。这种模式下,生产者发送消息后会阻塞&am…...
websocket服务端大报文发送连接自动断开分析
概述 当前springboot版本:2.7.4 使用依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>现象概述: 客户端和服务端已经有心跳…...
想写几个上位机,是选择学c#还是 c++ qt呢?
C#基本也就上位机开发开发,另外做做日常用的小工具很方便。 结合PLC,以太网做上位机,这个基本上控制这块都比较有需求。 另外我们用C#也做一些工具的二次开发,感觉还行。 C用qt框架其实学习起来可能稍微复杂些,但是…...
JavaScript 简单实现观察者模式和发布-订阅模式
JavaScript 简单实现观察者模式和发布-订阅模式 1. 观察者模式1.1 什么是观察者模式1.2 代码实现 2. 发布-订阅模式2.1 什么是发布-订阅模式2.2 代码实现2.2.1 基础版2.2.2 取消订阅2.2.3 订阅一次 1. 观察者模式 1.1 什么是观察者模式 概念:观察者模式定义对象间…...
java集成短信服务 测试版 qq邮箱简单思路
java集成短信服务 注册一个帐号 使用的是容联云,百度搜一下官网 用手机注册一个帐号就行,免费体验不需要认证 注册后会有八块钱送,可以使用免费的给自己设置三个固定手机号发送短信,不需要认证。 此页面的 三个信息需要在代码中…...
#P0994. [NOIP2004普及组] 花生采摘
题目描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”。 鲁宾逊先生和多多都很开心,因为花生正…...
Elasticsearch和Kibana的安装及验证
金翅大鹏盖世英,展翅金鹏盖世雄。 穿云燕子锡今鸽,踏雪无痕花云平。 ---------------- 2023.7.31.101 ----------------- 本文密钥:365 Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,常用来进行全文检索、…...
细讲TCP三次握手四次挥手(一)
计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。 网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必…...
【linux-zabbix】zabbix-agent启动报错:Daemon never wrote its PID file. Failing.
背景: 发现有部分的agent失联,排查发现机器正常,agent没起来。 排查日志发现: # journalctl -xe -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit zabbix-agent.service has begun start…...
【微信小程序】初始化 wxCharts,调用updateData动态更新数据
要初始化 wxCharts,你需要按照以下步骤进行操作: 首先,确保已将 wx-charts.js 文件正确引入到小程序的相应页面或组件中。可以通过以下方式引入: const wxCharts require(../../../../components/wx-charts.js);请根据你的项目…...
【C语言初阶(19)】实用的 VS 调试技巧
文章目录 Ⅰ 调试的介绍Ⅱ 常用调试快捷键Ⅲ 调试的时候查看程序当前信息⒈查看临时变量的值⒉查看内存信息⒊查看调用堆栈⒋查看汇编信息⒌查看寄存器信息 Ⅳ 观察形参指针指向的数组Ⅴ 易于调试的代码该如何编写⒈const 修饰指针变量⒉良好代码示范 Ⅵ 编程中常见的错误 Ⅰ 调…...
虚拟机之间配置免密登录
目录 一、配置主机名映射 二、虚拟机配置SSH免密登录 三、验证 一、配置主机名映射 即修改/etc/hosts文件,将几台服务器和主机名进行映射。 注意每台服务器都要进行同样的配置。这样在各自服务器下,我们就可以通过主机名访问对应的ip地址了。 当然&…...
【contenteditable属性将元素改为可编辑状态】
元素添加contenteditable属性之后点击即可进入编辑状态 像这种只修改一条属性不必再打开弹框进行编辑,使用contenteditable会很方便 添加失焦、回车、获焦事件 如 <p :contenteditable"item.contenteditable || false"keydown.enter"key($event…...
Android 第三方库CalendarView
Android 第三方库CalendarView 根据需求和库的使用方式,自己弄了一个合适自己的日历,仅记录下,方便下次弄其他样式的日历。地址 需求: 只显示当月的数据 默认的月视图有矩形的线 选中的天数也要有选中的矩形框 今天的item需要…...
钉钉群消息推送
1. 添加钉钉群机器人 PC端登录(当前版本手机端无法进行推送关键词设置),群设置--> 机器人 --> webhook进行安全设置复制webhook对应的url 2. 群消息推送 钉钉群消息支持纯文本和markdown类型 2.1 调用示例源码 import com.alibaba.…...
css clip-path 属性介绍
circle() – 圆 语法:circle( [<shape-radius>]? [at <position>]? ) shape-radius 圆的半径 position 圆的中心点位置 使用方法: clip-path: circle(); // 以元素的中心点为圆的中心点,最小宽度一半为圆的半径。clip-path: c…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
