SpringMVC基础入门(一)之理论基础概念
文章目录
- SpringMVC
- 1.概念
- 2.常用注解
- 请求与响应
- 1.请求参数
- 2.JSON传输
- 3.常用注解
- 响应
- 1.响应页面
- 2.响应JSON数据
- Rest风格
- 1.介绍
- 2.常用注解
SpringMVC
1.概念
(1)定义
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架。
(2)为什么要引入SpringMVC?
回顾之前Web开发流程——MVC三层架构
- controller负责请求和数据的接收,接收后将其转发给service进行业务处理
- service根据需要会调用dao对数据进行增删改查(比如组合数据访问层中基本功能,完成复杂的业务逻辑功能如注册功能)
- dao负责对数据库的CRUD基本操作,把数据处理完后将结果交给service,service再交给controller
- controller根据需求组装成Model和View,Model和View组合起来生成页面转发给前端浏览器
上面的是同步调用,但是随着互联网发展,性能逐渐跟不上需求,于是就有了下面的异步调用
因为是异步调用,所以后端不需要返回view视图,将其去除
前端如果通过异步调用的方式进行交互,后台就需要将返回的数据转换成json格式进行返回
(3)SpringMVC主要作用
- controller如何接收请求和数据
- 如何将请求和数据转发给业务层
- 如何将响应数据转换成json发回到前端
相比 Servlet, SpringMVC 使用更简单,开发更便捷
2.常用注解
名称 | 类型 | 位置 | 作用 |
---|---|---|---|
@Controller | 类注解 | SpringMVC控制器类定义上方 | 设定SpringMVC的核心控制器bean |
@RequestMapping | 类注解或方法注解 | SpringMVC控制器类或方法定义上方 | 设置当前控制器方法请求访问路径 |
@ResponseBody | 类注解或方法注解 | SpringMVC控制器类或方法定义上方 | 设置当前控制器方法响应内容为当前返回值,无需解析 |
请求与响应
1.请求参数
前端发送请求参数,后端该如何接收和返回?
通常这些有GET请求方式,POST请求方式等
GET请求如:
http://localhost/commonParam?name=itcast&age=15
Contorller接收如:
@Controller
public class UserController {@RequestMapping("/commonParam")@ResponseBodypublic String commonParam(String name,int age){System.out.println("普通参数传递 name ==> "+name);System.out.println("普通参数传递 age ==> "+age);return "{'module':'commonParam'}";}
}
POST请求一般是表单类型
普通参数 url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数。如果形参与地址参数名不一致该如何解决?
如:
此时需要采用形参!
public String commonParamDifferentName(@RequestParam("name") String userName , int age){
2.JSON传输
目前前后台常用异步方式进行交换,传输的数据使用的是JSON,那么前端该如何传输,后端该如何接收?
JSON数据一般有三种
- json普通数组([“value1”,“value2”,“value3”,…])
- json对象({key1:value1,key2:value2,…})
- json对象数组([{key1:value1,…},{key2:value2,…}])
@EnableWebMvc
——开启json数据类型自动转换
3.常用注解
名称 | 类型 | 位置 | 作用 |
---|---|---|---|
@RequestParam | 形参注解 | SpringMVC控制器方法形参定义前面 | 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次 |
@RequestBody | 形参注解 | SpringMVC控制器方法形参定义前面 | 绑定请求参数与处理器方法形参间的关系(主要接收JSON) |
@EnableWebMvc | 配置类注解 | SpringMVC配置类定义上方 | 开启SpringMVC多项辅助功能(包含了将JSON转换成对象的功能) |
响应
1.响应页面
设置返回页面
2.响应JSON数据
常用注解
名称 | 类型 | 位置 | 作用 |
---|---|---|---|
@ResponseBody | 方法\类注解 | SpringMVC控制器方法定义上方和控制类上 | 设置当前控制器返回值作为响应体, 写在类上,该类的所有方法都有该注解功能 |
当方法上有@ReponseBody
注解后
- 方法的返回值为字符串,会将其作为文本内容直接响应给前端
- 方法的返回值为对象,会将对象转换成JSON响应给前端
Rest风格
1.介绍
(1)简介
REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格
(2)为什么要引入Rest风格
当表示一个网络资源时,传统风格资源描述形式
http://localhost/user/getById?id=1
查询id为1的用户信息http://localhost/user/saveUser
保存用户信息
而REST风格描述形式
http://localhost/user/1
http://localhost/user
优点:隐藏资源的访问行为,无法通过地址得知对资源是何种操作;书写简化
(3)如何区分某请求是什么操作?
一个相同的url地址即可以是新增也可以是修改或者查询,所以该怎么区分?
按照REST风格访问资源时使用行为动作区分对资源进行了何种操作
资源描述 | 作用 | 行为动作 |
---|---|---|
http://localhost/users | 查询全部用户信息 | GET(查询) |
http://localhost/users/1 | 查询指定用户信息 | GET(查询) |
http://localhost/users | 添加用户信息 | POST(新增/保存) |
http://localhost/users | 修改用户信息 | PUT(修改/更新) |
http://localhost/users/1 | 删除用户信息 | DELETE(删除) |
总结一下,常见的请求方式:GET, POST, PUT, DELETE。
2.常用注解
名称 | 类型 | 位置 | 作用 |
---|---|---|---|
@PathVariable | 形参注解 | SpringMVC控制器方法形参定义前面 | 绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应 |
@RestController | 类注解 | 基于SpringMVC的RESTful开发控制器类定义上方 | 设置当前控制器类为RESTful风格, 等同于@Controller与@ResponseBody两个注解组合功能 |
@GetMapping @PostMapping @PutMapping @DeleteMapping | 方法注解 | 基于SpringMVC的RESTful开发控制器方法定义上方 | 设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作, 例如@GetMapping对应GET请求 |
三种形参注解@RequestBody
、@RequestParam
、@PathVariable
的区别和应用分别是什么?
-
区别
- @RequestParam用于接收url地址传参或表单传参
- @RequestBody用于接收json数据
- @PathVariable用于接收路径参数,使用{参数名称}描述路径参数
-
应用
- 发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
- 如果发送非json格式数据,选用@RequestParam接收请求参数
- 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
相关文章:
SpringMVC基础入门(一)之理论基础概念
文章目录SpringMVC1.概念2.常用注解请求与响应1.请求参数2.JSON传输3.常用注解响应1.响应页面2.响应JSON数据Rest风格1.介绍2.常用注解SpringMVC 1.概念 (1)定义 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架。 (2)为什…...
前端知识点
一. slice和splice区别: 1.splice改变原数组,slice不改变原数组。 2.splice除了可以删除之外,还可以插入。 3.splice可传入3个参数,slice接受2个参数。slice(start,end):方法可从已有数组中返回选定的元素,…...
【docker知识】从容器中如何访问到宿主机
一、说明 使用 Docker 能实现服务的容器化,并使用容器间网络在它们之间进行通信。有时您可能需要一个容器来与宿主机上非容器化的服务通信。以下是如何从 Docker 容器中访问本地主机或 127.0.0.1的具体方法。 二、方法1:简单的选择 适用于 Windows 和 Ma…...
MySQL入门篇-MySQL常用流程控制函数小结
备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊常见的流程控制函数 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本 流程控制函数 函数名函数用途CASEcase语句用于条件判断if()if/else条件判断ifnull()null数据处理nullif()retur…...
大数据技术架构(组件)35——Spark:Spark Streaming(1)
2.3、Spark Streaming2.3.0、OverviewSpark Streaming 是核心 Spark API 的扩展,它支持实时数据流的可扩展、高吞吐量、容错流处理。数据可以从许多来源(如 Kafka、Kinesis 或 TCP 套接字)获取,并且可以使用复杂的算法进行处理&am…...
实现超大文件上传逻辑
引言 文件上传功能是我们开发中经常会遇到的功能点,当日常开发中遇到小文件(比如:头像),可以直接将文件转为字节流直接上传到服务器上即可。但是当遇到大文件这种(比如:一部电影至少1个G)该怎么…...
JavaScript HTML DOM EventListener
JavaScript HTML DOM EventListener 是一个非常重要的概念,在前端开发中被广泛使用。它是用来监听 HTML DOM 上的事件,并执行特定的代码块。 EventListener 的语法非常简单,下面是一个示例代码: element.addEventListener("…...
构建RFID系统的重要组成部分
RFID读写设备,通常被用来扫描读取安装了RFID电子标签的目标物品,能实现快速批量无接触读写,是构建RFID系统的重要组成部分。RFID读写设备,通常有固定式读写设备和可移动读写设备两种。下面来了解一下RFID的特点,RFID系…...
PID控制算法简介
目录 1 简介 2 比例Proportional 3 积分Integral 4 微分Differential 5 公式 6 积分限幅 7 积分限行 8 相关代码 1 简介 PID控制中有P、I、D三个参数,PID即:Proportional(比例)、Integral(积分&#…...
【王道数据结构】第八章 | 排序
目录 8.1. 排序的基本概念 8.2. 插入排序 8.2.1. 直接插入排序 8.2.2. 折半插入排序 8.2.3. 希尔排序 8.3. 交换排序 8.3.1. 冒泡排序 8.3.2. 快速排序 8.4. 选择排序 8.4.1. 简单选择排序 8.4.2. 堆排序 8.5. 归并排序和基数排序 8.5.2. 基数排序 8.1. 排序的基本概念 排…...
95后外贸SOHO,年入7位数,他究竟是怎么做的?
外贸SOHO,一年到底能挣多少钱?有人说:“勤勤恳恳,年薪也就十来万吧”;也有人说:“100万而已我早就已经挣到了”;还有人说:“谁说新手难出头?我做跨境半年赚200万…...
2023年全国最新消防设施操作员精选真题及答案
百分百题库提供消防设施操作员考试试题、消防设施操作员考试预测题、消防设施操作员考试真题、消防设施操作员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 一、多选题 15、以下符合电气火灾监控系统监控设备的安装要求的有:( ) A、…...
mysql 无需修改配置文件,即可改变表数据存储位置
由于Linux系统的mysql 默认数据存储在/var/lib/mysql路径下,而该路径装系统时默认大小仅50G,当我们的数据稍微大一点时就会把该空间占满,无法再插入数据。 针对该问题有两种解决办法: 1、修改/etc/my.cnf配置文件,重启…...
轻松解决Session-Cookie 鉴权(含坑)附代码
Session-Cookie 鉴权 cookie介绍 Cookie 存储在客户端,可随意篡改,不安全有大小限制,最大为 4kb有数量限制,一般一个浏览器对于一个网站只能存不超过 20 个 Cookie,浏览器一般只允许存放 300个 CookieCookie 是不可跨…...
pyinstaller使用详细
目录常用命令spec文件配置报错常用命令 pyinstaller -D xxx.py //打包生成目录(director)pyinstaller -F xxx.py//打包生成单个exe文件pyinstaller xxx.spec //根据现有的spec文件进行打包运行以上命令之一后会生成build、dist文件夹以及xxx.spec文件&a…...
java -数据结构,List相关基础知识,ArrayList的基本使用,泛型的简单、包装类介绍
一、 预备知识-泛型(Generic) 1.1、泛型的引入 比如:我们实现一个简单的顺序表 class MyArrayList{public int[] elem;public int usedSize;public MyArrayList(){this.elem new int[10];}public void add(int key){this.elem[usedSize] key;usedSize;}public …...
RabbitMQ学习总结(10)—— RabbitMQ如何保证消息的可靠性
一、丢失场景 RabbitMQ丢失的以下3种情况: (1)生产者:生产者发送消息至MQ的数据丢失...
购物车案例【版本为vue3】
前言: 首先我们要明白整个购物车的组成。它是由一个主页面加两个组件组合成的。本章主要运用父子之间的通讯: 父传子 子传父 首先新建一个vue3项目,这里有俩种创建方式: vue-cli : ● 输入安装指令 npm init vuelates…...
Multisim14 安装包及安装教程
Multisim14 安装教程 Multisim14下载地址:Kevin的学习站–安装包下载地址 Multisim14 简介: Multisim 14 是美国国家仪器有限公司(National Instrument,NI)推出的以 Windows 为基础、符合工业标准的、具有 SPICE 最佳仿…...
Java实现简单的图书管理系统源码+论文
简单图书管理系统设计(文末附带源码论文) 为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作,包括3个表: 图书信息表——存储图书的基本信息,包括书号、书名、作者…...
前端调试2
一、用chrome调试(node.js)例:const fs require(fs/promises);(async function() {const fileContent await fs.readFile(./package.json, {encoding: utf-8});await fs.writeFile(./package2.json, fileContent); })();1.先 node index.js 跑一下:2.然…...
AlphaFold 2 处理蛋白质折叠问题
蛋白质是一个较长的氨基酸序列,比如100个氨基酸的规模,如此长的氨基酸序列连在一起是不稳定的,它们会卷在一起,形成一个独特的3D结构,这个3D结构的形状决定了蛋白质的功能。 蛋白质结构预测(蛋白质折叠问题…...
问卷调查会遇到哪些问题?怎么解决?
提到问卷调查我们并不陌生,它经常被用作调查市场、观察某类群体的行为特征等多种调查中。通过问卷调查得出的数据能够非常真实反映出是市场的现状和变化趋势,所以大家经常使用这个方法进行调查研究。不过,很多人在进行问卷调查的时候也会遇到…...
量化选股——基于动量因子的行业风格轮动策略(第1部分—因子测算)
文章目录动量因子与行业轮动概述动量因子的理解投资视角下的行业轮动现象投资者视角与奈特不确定性动量因子在行业风格上的效果测算动量因子效果测算流程概述1. 行业选择:申万一级行业2. 动量因子选择:阿隆指标(Aroon)3. 测算方法…...
工作常用git命令
修改hard:git reset --hard md5git push -f合并多次commitsgit rebase -i HEAD~4git push -f冲突文件被覆盖冲突文件被覆盖了,可以用git checkout commitId /path来快速把一个或一些文件还原会之前的提交,重新commit ,merge一次删除分支git b…...
test3
数据链路层故障分析 一、网桥故障 a.主要用途简述 网桥作为一种桥接器,可以连接两个局域网。工作在数据链路层,是早期的两端口二层网络设备。可将一个大的VLAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN,使得LAN上的…...
领证啦,立抵3600,软考证书到手后还有很多作用
2022年下半年软考合格证书发放在2023年2月-3月进行,目前已有多个省市开始发证了,比如上海、江苏、辽宁、浙江、山东等地。还没收到领证通知的考生也不要着急,可以关注当地软考办通知。 拿到证书的朋友可以去申请入户,职称评聘&am…...
响应式布局之viewport-超级简单
之前文章CSS布局之详解_故里2130的博客-CSDN博客 上面的文章可以实现响应式布局,根据浏览器的大小变化而变化,但是相对于viewport来说,之前的还是有点复杂,而使用viewport更加的简单。 当我们使用amfe-flexible的时候࿰…...
分布式计算考试资料
第一章 分布式系统的定义 分布式系统是一个其硬件或软件组件分布在连网的计算机上,组件之间通过传递信息进行通信和动作协调的系统。分布式系统的目标 资源共享(resource sharing) 一些计算机通过网络连接起来,并在这个范围内有效地共享资源。 硬件的共…...
Java修饰符和运算符,超详细整理,适合新手入门
目录 一、访问控制修饰符 1、访问权限 二、运算符 1、算术运算符 2、关系运算符 3、逻辑运算符 4、赋值运算符 5、三元运算符 一、访问控制修饰符 Java 支持 4 种不同的访问权限: private 私有的 protected 受保护的 public 公共的 default 默认 1、…...
工信部网站备案信息查询/软件推广平台有哪些
稍微懂一些网络技术的人都明白,自建搭建一个邮件服务器开展无限制的邮件营销不靠谱。原理可以先不了解,反推一下知道,如果可行,谁还用新浪、QQ、Gmail、雅虎等这些邮箱,更没有必要花钱购买他们限制每天数千封发送量的收…...
机械类网站如何做网站优化/免费发布网站seo外链
hsfzxjy的这个“17 行代码实现的简易 Javascript 字符串模板”在前端很有用,想请教各位大大php版本的应该怎么改写。function render(template, context) {var tokenReg /(\\)?\{([^\{\}\\])(\\)?\}/g;return template.replace(tokenReg, function (word, slash1…...
做头发个人网站制作素材/千瓜数据
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了&…...
江阴安泰物流有限公司网站谁做的/动态网站设计毕业论文
工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository)工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Gi…...
怎么做搜索网站/百度推广天天打骚扰电话
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 前言 本章Linuxshell讲解,感谢观看,干货满满。 目录…...
大网站cn域名/北京优化网站方法
开发四年只会写业务代码,分布式高并发都不会还做程序员? Apache HTTP 服务器于4月1日发布了最新的稳定版本 2.4.39,主要是修复安全问题。点此进行下载。 在发布更新不久后,安全研究人员 Charles Fol 便在其博客发布了关于 Apach…...