您现在的位置是:首页 >学无止境 >Spring MVC网站首页学无止境

Spring MVC

正经程序猿 2024-06-14 17:18:13
简介Spring MVC

目录

什么是Spring MVC

MVC定义

MVC和Spring MVC的关系

怎么学Spring MVC

创建Spring MVC项目

0.使用Spring Boot来创建Spring MVC项目

1.实现连接

2.获取参数

获取单个参数

 获取多个参数

获取对象

后端参数重命名

获取JSON对象

从基础的URL中获取参数

上传文件@RequestPart

获取Cookie

获取header

获取Session

返回数据

返回静态页面

 请求转发和请求重定向


什么是Spring MVC

Spring Web MVC是基于Servlet API构建的原始的Web框架,从一开始就包含在Spring 框架之中.它的正式名称是Spring Web MVC,但是也通常被称为是Spring MVC.

由上述我们可知:

1.Spring MVC是一个Web框架

2.Spring MVC是基于Servlet API构建的.


MVC定义

MVC是Model View Controller的缩写,它是一种软件的架构模式,把软件系统分为模型,视图和控制器三个部分.

Model:是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据.

View:是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller:是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据, 控制⽤户输⼊,并向模型发送数据.

上述的这种模式已经被淘汰,原因就是上述的模式前后端还是在一起的,而现在的项目大多都是前后端分离的,我们只需要了解这种设计模式即可.


MVC和Spring MVC的关系

MVC是一种思想,Spring MVC是对MVC思想的具体实现.类比于IoC和DI的关系.

总结来说,就是Spring MVC是一个实现了MVC模式,并继承了Servlet API的Web 框架.

Web框架就表明我们在浏览器中输入url后,Spring MVC项目就能感知到用户的请求.


怎么学Spring MVC

Spring MVC是所有java项目的基础,我们创建的Spring和Spring Boot项目都是基于Spring MVC的.

学习Spring MVC要掌握三个功能:

1.连接的功能:将浏览器和Java程序连接起来,也就是说访问一个地址能够调用到我们的Spring程序.

2.获取参数的功能:用户访问的时候所带的参数,我们要能在程序中获取到.

3.输出数据的功能:执行完业务的逻辑之后,我们要能把程序的执行结果返回给用户.


创建Spring MVC项目

创建Spring MVC项目有两种方式:

1.2018年之前,使用maven项目添加Spring MVC框架的方式来创建,此种创建方式太过麻烦,复杂,还容易造成版本号不匹配的情况.

2.现在,我们都是使用Spring Boot来创建Spring MVC项目.


0.使用Spring Boot来创建Spring MVC项目

在创建Spring Boot的过程中添加Spring Web的依赖就完成了Spring MVC项目的创建.此时我们的项目就有了Web能力.


1.实现连接

3种实现连接的方式:@RequestMapping,@PostMapping,@GetMapping.


@RequestMapping注解是支持GET和POST请求的.

可以通过设置其method来限制接收的请求类型.

我们可以通过PostMan来模拟发送一个post请求,看其能否正常相应.

可以看到其返回了正确的结果.说明我们的属性设置生效了.


 


2.获取参数

获取单个参数

如果对应不起来或者是不传参数,那么返回的结果都是String的默认值null

那么把Sting改为Integer或者是int呢,会返回null还是报错呢?

所以,我们在进行参数传递的时候尽量都使用基本数据类型的包装类.


由于我们的Spring MVC是基于Servlet API构建的,所以我们依然可以使用servlet的方式来获取参数.

所以,我们可以使用Servlet的方式来获取请求中的IP等内容. 


 获取多个参数


获取对象

首先创建一个对象的实体类

创建连接

传递参数

那么前端的参数怎么就变成了后端的对象了呢?

 框架会实现自动的参数映射(将前端传递的参数映射到对象的属性),只要保证前端传递的key和实体类里的属性一致即可.


后端参数重命名

也叫做后端参数映射,说的是在某些情况下,前端传递的参数key和我们后端的key可以不一致,比如前端传递了一个time给后端,而后端又是用createtime来接收的,这样就会出现参数接收不到的情况,那么我们就可以使用@RequestParam来重命名前后端的参数值.

设置了@RequestParam,那么前端就必须要传递time这个参数,如果不传递就会报错.

 

查看@RequestParam源码:

 设置成false后,那么前端不传递这个参数也不会报错了.


获取JSON对象

当我们前端传递JSON对象时,后端在使用接收普通对象的方式是接收不了的.

我们使用postman来发送一个JSON对象:

可以看到返回值都是null. 

要想接收JSON对象,要使用注解@RequestBody来标注一下.

 

返回的都是正确的结果. 


从基础的URL中获取参数

直接在URL的路径中传参有两个优点:

  • 1.搜索引擎抓取关键字的权重更高
  • 2.URL更加简洁

从基础的URL中获取参数要使用注解@PathVariable


上传文件@RequestPart

上传文件我们要使用注解@RequestPart

我们将上传的文件保存在D盘的work目录下,在此电脑中看一下是否已经写入了.

注意:这里要特别注意的是,当上传的文件大于1MB的时候,就会报错.这是因为SpringBoot默认的单次上传的文件大小最大是1MB,单次请求的最大大小是10MB.针对这个问题,我们可以在配置文件中重新设定最大值.

查找Spring官网的系统配置项,我们就可以看到相关的说明.


使用上述的方式上传文件,只是文件上传的一个最基础的操作.使用这个方式 上传文件是不适合生产的,因为使用这个方式后面上传的文件会覆盖前面上传的文件,图片的保存位置就是写死的那一个路径.

要解决上面的问题,就要解决文件名不能重复的问题.在这里文件名不重复,我们使用的是UUID.

UUID叫做通用唯一标识,它是由当前电脑网卡的mac+时间戳+随机数组成的,使用UUID可以保证我们的文件名字不会重复.

多次进行上传操作:


获取Cookie

获取cookie有两种方式,传统的方式获取(得到request对象,用getCookies()方法),简洁的方式获取,直接使用@CookieValue注解.

伪造一个cookie发送

都能够正确返回cookie.


获取header

获取header也有两种方式,传统的得到request对象调用getHeader()方法,简洁的方式可以使用@RequestHeader注解.


获取Session

获取session之前要先存储session


返回数据

返回静态页面

 

 

 默认请求下无论是Spring MVC或者是Spring Boot返回的是视图(xxx.html).而现在都是前后端分离的,后端只需要返回给前端数据即可,这个时候我们就需要使用@ResponseBody注解,返回的就是数据,此注解我们之前已经用过多次.


 请求转发和请求重定向

return不但可以返回视图,还可以实现跳转,跳转的方式有两种:forward请求转发和redirect请求重定向.

二者有很大的区别:

1.定义不同

请求转发:发生在服务器端程序内部,当服务器收到一个客户端的请求之后,会先将请求,转发给目标地址,再将目标地址返回的结果转发给客户端.

请求重定向:请求重定向指的是服务器收到客户端的请求之后,会给客户端返回一个临时响应头,临时响应头中记录了客户端需要再次发送请求的URL地址,客户端收到地址之后,会将请求发送到新的地址上.

2.请求方不用

请求转发是服务器的行为,请求重定向是客户端的行为.

 

3.数据共享不同

 请求转发是服务器端实现的,所以整个执行流程中,客户端(浏览器端)只需要发送一次请求,因此整个交互过程中使用的都是同一个 Request 请求对象和一个 Response 响应对象,所以整个请求过程中,请求和返回的数据是共享的;而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的。

4.最终URL地址不同

请求转发是服务器端代为请求,再将结果返回给客户端的,所以整个请求的过程中 URL 地址是不变的;而请求重定向是服务器端告诉客户端,“你去另一个地访问去”,所以浏览器会重新再发送一次请求,因此客户端最终显示的 URL 也为最终跳转的地址,而非刚开始请求的地址,所以 URL 地址发生了改变。


风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。