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…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
