Spring MVC(一)

embedded/2024/11/14 5:40:05/

1. Spring MVC是什么?

搞清楚Spring MVC之前先搞清楚MVC是什么?MVC是一种架构设计模式,也就是一种思想,M是Model,V是View,C是Controller。他们之间的关系举一个例子来介绍。比如去饭店吃饭,一进去有服务员接待,这个服务员就是View,点菜之后,服务员把点的菜发给前厅,前厅就是Controller,前厅再根据菜的种类给不同的厨房下达做菜的命令,厨房就是Model。

Spring MVC还是一个web框架,所以Spring MVC可以看作是一个实现了MVC模式的web框架。

Spring MVC的全称是Spring Web MVC。

上篇文章介绍了创建一个Spring Boot项目可以使用idea创建或者使用网页来创建,而Spring MVC可以在创建Spring Boot项目时选择Spring Web框架,来实现web功能,此时就变成了一个Spring MVC项目。下图使用的是网页版创建Spring Boot项目,用Spring Boot项目创建Spring MVC只是其中一种创建Spring MVC的方式,其他创建方式比较复杂,在此不做介绍。https://start.aliyun.com/

Spring MVC是一个web框架,那么当用户输入url的时候Spring MVC项目需要能识别到用户的请求并给用户返回相应的响应。学习Spring MVC主要在学习如何通过浏览器和用户进行交互。

主要要学习的分为以下三个方面:

1. 建立连接:把用户(浏览器)与java程序连接起来,也就是访问一个地址时能调用到Spring程序

2.请求:用户在操作过程中会发起请求,请求过程中会携带一些参数,在程序中要想办法获取到这些参数,所以这一步主要是在获取参数。

3.响应:处理完用户的请求后把对应的响应返回给用户

2. 创建项目+建立连接

创建项目的方式在前面已做介绍,在此不再赘述。

把下载好的zip解压后用idea打开解压好的文件,此时就可以开始编写了。

创建了一个UserController类,接下来先介绍一下@RestController这个注解。一个项目中有很多类,Spring一直在扫描项目中的所有类,那Spring怎么知道哪个方法需要被执行呢?加上这个注解后Sping才去看类的内部有没有@RequestMapping这个注解,那@RequestMapping这个注解的作用又是什么呢?它的作用是路由映射:当输入一个网址时,把这个url请求对应到某个类的某个方法的过程。@RestController这个注解的作用还有很多后面再做介绍。

在这里使用回环地址127.0.0.1来练习。回环地址可以想象成是一条网线,发送端和接收端都是自己,所以访问这个url的时候其实就是把请求发给了自己,代码处理响应后把响应又发回给自己。此时输入url:127.0.0.1:8080/sayHi,看到页面上显示内容就是我们代码中写的内容(路由映射的地址和方法名不用必须相同

@RequestMapping注解可以修饰类也可以修饰方法,访问路径是类路径加方法路径。@RequestMapping url的路径加不加 “/” 都可以,没加的话Spring程序启动时会自动补上

 

3. @RequestMapping支持Post请求和Get请求 

浏览器发送的请求都是post请求,所以@RequestMapping一定支持Get请求。Post请求需要通过form表单构造请求,也就是需要编写前端代码,作为一个Java程序猿也就是后端程序猿我们的前端代码编写能力不高,后端只负责编写后端的业务逻辑。那这个时候引入了一个软件Postman

url:https://www.postman.com/downloads/

后端代码中指定使用Post请求

Postman选择请求方式为post,并输入url就得到了响应,由此看到@RequestMapping是支持Post请求的。

 form-data主要是用来提交文件/图片,x-www-form-urlencoded form表单, 对应 Content-Type: application/x-www-from-urlencoded,raw支持图中这五种文本提交方式。binary是二进制类型,比如图片流

4. 传递单个参数 

继续使用Post请求

 此时传错了参数类型发现报了400错误

 如果传入的参数为空,如果还是继续使用引用数据类型int那么就会500报错.

此时把int改为包装类型Integer发现获取到的参数是null,所以对于可能存在参数为空的场景时最好使用包装类型 。


5. 传递多个参数 

 由此可见传递传递多个参数的时候url中的参数传递顺序没有强制要求必须按顺序,前后端进行参数匹配的时候是按照参数名称进行匹配的。

6. 传递对象

有的时候需要提交很多次的数据,此时就可以构造出一个对象,变成直接传入对象传入参数

java">public class Person {public String name;public Integer id;public Integer password;@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", id=" + id +", password=" + password +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getPassword() {return password;}public void setPassword(Integer password) {this.password = password;}
}

 7. 传递数组

传递一个数组:请求参数名与形参参数名相同并且请求参数为多个,后端定义数组类型形参就可以接收参数。

 8. 传递JSON类型

JSON可以理解为JavaScript对象表示法,跟JavaScript没有关系,只是语法类似。

注意:@RequestBody是必须要加的


http://www.ppmy.cn/embedded/136809.html

相关文章

分布式-锁

一、锁的业务场景 1、为什么要加锁? 在多线程环境下,针对一些共享资源往往会出现线程安全问题,需要加锁校准程序执行过程。 2、单机锁的类型 synchronized 关键字。 Lock 接口的锁。 atomic 包的封装类。 3、分布式场景中的锁 在分布…

Java反射原理及其性能优化

目录 JVM是如何实现反射的反射的性能开销体现在哪里如何优化反射性能开销 1. JVM是如何实现反射的? 反射是Java语言中的一种强大功能,它允许程序在运行时动态地获取类的信息以及操作对象。下面是一个简单的示例,演示了如何使用反射调用方法&#xff…

非关系型数据库(1)---MongoDB

目录 1.MongoDB 1.MongoDB的特点 2.MongoDB的应用场景 3.MongoDB与MySQL的比较 2.数据库操作 1. 创建数据库 2. 切换数据库 3. 查看所有数据库 4. 查看当前数据库 5. 删除数据库 6. 查看数据库统计信息 7. 备份数据库 8. 恢复数据库 9. 创建用户和授权 10. 删除用…

CSS教程(四)- 字体

1、尺寸单位 px 像素单位% 百分比,参照父元素对应属性的值进行计算em 字体尺寸单位,参照父元素的字体大小计算,1em16pxrem字体尺寸单位,参照根元素的字体大小计算,1rem16px 2、字体属性 介绍 CSS Fonts (字体)属性用于定义字体…

NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型

论文速读|LongReward: Improving Long-context Large Language Models with AI Feedback 论文信息: 简介: 该论文试图解决的问题是如何提高长文本上下文大型语言模型(LLMs)在监督式微调(SFT)中的性能&#…

JVM知识点大全(未完...)

JVM运行时数据区域 堆 堆是Java虚拟机中用于存储对象的主要区域,包括字符串常量池。绝大多数对象都是在堆中创建的(少部分对象可能会在栈上分配)。为了更好地进行垃圾回收,堆被划分为年轻代和老年代两部分。年轻代又被进一步分为E…

【IC每日一题:IC验证面试常问-3】

【IC每日一题:IC验证面试常问-3】 1.1 SV约束如何使用以及有哪几种方式?”:“和":/"的区别?,rand和randc的区别?如何关闭约束?1.2 代码覆盖率、功能覆盖率、SVA覆盖率都是衡量什么的;…

创新体验触手可及 紫光展锐携手影目科技推出AI眼镜开放平台

近日,紫光展锐携手影目科技共同发布了搭载展锐W517芯片的影目X系列AI眼镜开放平台。这一产品的推出标志着双方在智能穿戴领域的深度协作,将紫光展锐的领先芯片技术与影目的产品创新相融合,合力打造全球智能眼镜市场的标杆产品。这一战略布局不…