在spring官网的定义中,spring MVC的描述是:
Spring web mvc是基于Servlet API的原始web框架,从一开始就包含在 Spring web框架中。
总结:
MVC(model,view,controller)是一种应用程序设计模式,包含了model,view,controller三个模块。
Spring MVC就是对MVC的一种实现,但是MVC的view模块已经过时了,现在流行的前后端分离,后端只负责返回数据格式,不再去渲染页面。view让前后端有耦合了。
因为Spring MVC是一个web框架,所以它的主要功能还是和前端进行交互。现在将与前端交互分为四个阶段来介绍Spring MVC的使用,四个阶段为:创建项目,建立连接,获取参数,返回响应。
由于Spring MVC的依赖很多,所以手动添加的门槛很高,必须要记得所有的依赖名称,以及相互之间的版本适配。
而使用 Spring Boot自动添加,就只需要选中 Spring web框架添加可以自动添加依赖了。这也体现了Spring Boot框架快速集成多个框架的优点。
Spring Boot添加web框架。

建立连接
创建好Spring MVC项目的并建立连接的基础就是,要在前端发送请求时有对应的响应类。创建响应类要有两个注解:



下方就设置了这个路由只能是get方法才能访问到。

通过查看@RequestMapping源码

可以发现method属性的接受对象也是一个枚举,所以可以指定多个能查询的方法。

接收参数
URL中的key=value传递参数,后端接收前端发送的参数只能通过在响应类的响应方法中设置合适的参数来接受。
单个参数,url中只有一个键值对,并且参数名键值对的键值一一对应。

单个对象,url中有多个键值对,并且这些键值对同属于一个对象,后端自定义一个类,这个类的属性和属性名和前端发送的键值对参数一一对应。

多个参数,url中有多个键值对,但是这些键值对不同属一个对象,后端响应方法就设置多个参数,保证参数名一一对应。

建议:接收参数的类型都用包装类,不要用基本参数类型,比如整数就用Integer不用int,因为如果http中没传参数时,integer就会默认初始化成null,但是int类型直接就是一个报错
参数的重命名
当前端传递的参数和后端接收的参数名不匹配的时候,就需要在后端使用@RequestParam中的value来重命名参数。

@RequestParam有两个特点:

body部分的json格式传参
json格式的参数虽然也是一个对象,但是不能再单单使用对象参数在方法中接受参数了,还需要在参数前面加上@RequestBody注解

可以看出,使用了@RequestBody注解的Student参数从body中正确的获得了json对象,并且可以再后面跟上一个参数来获取url中传递的键值对参数。
注意:
使用ajax进行发送请求如下时:

并不是以json格式传递的参数,这是普通的js对象,不需要使用@RequestBody注解
ajax发送json格式的参数代码:
jQuery.ajax({
url: "/article/indexList",
type: "post",
data: JSON.stringify({
"pageIndex": pageIndex,
"pageLength": pageLength
}),
contentType: "application/json; charset=utf-8" // 设置请求头,告诉服务器发送的是 JSON 数据
})

URL传参有两个优点
接收文件参数
前端传文件也是通过键值对的方式传递,所以后端还是要先根据key值获取文件。
获取文件参数的方法的接受参数必须是MultipartFile类对象,并且要用@RequestPart注解去命名这个对象。

接收到文件参数之后还要几个步骤才能将文件保存到本地。


获取Cookie,@CookieValue
@CookieValue修饰的默认必须传
获取header,@RequestHeader(“header键值”)
设置session和获取session

获取一个静态页面

请求转发其实就是上面访问静态页面的方式,上面返回的字符串前面少了forward:,请求重定向就是redirect:路径,默认省略前面的直接输路径就是请求转发。
请求转发:就是服务器端直接就将对应的页面返回给浏览器了。
请求重定向:将对应的资源的url返回给浏览器,浏览器改变访问的url,再发一个http请求才获取到这个资源。
注解总结:
@RequestMapping,@PostMapping等:路由注解
@RequestBody:修饰方法参数的对象类型.表示接受的json格式的对象。
@RequestParam:修饰方法参数的别名,默认为必须传参。
@RequestPart:修饰文件参数MultipartFile对象,给对象命名。
@CookieValue:修饰方法参数,表示接收的cookie。
@RequestHeader:修饰方法参数,表示接收的是Header