前言:全程Spring Web MVC,是Web的一个框架,简称Spring MVC。
1.什么是MVC?
MVC是model view controller的缩写,是软件工程的一种软件设计架构,它把软件系统分成3个部分:模型,视图,控制器。
eg:
但是当前阶段的话,前后端大部分时候已经完全分离了,后端只专注于干后端的事,所以这里的view没有了,返回的就是view所需要的数据而不是页面了。
2.Spring MVC
Spring MVC是基于Spring实现的MVC(Web)框架,现如今的Spring MVC框架图:
学习Spring MVC,首先就是使用其中的注解。
3.Spring MVC注解
(1)建立连接
a.@RequestMapping
路由映射。进行Web开发的前提,需要传入路径(一般是:类路径+方法路径),方法和类都可以修饰,支持get和post请求,可以通过其中method属性对请求类型做出限制。
b.@RestController
返回数据。是由@RequestBody和@Controller,@Controller只是返回视图,加上@RequestBody就是返回数据了
有了这两个基础的注解,我们才能在网络上进行得以找到目标进行传输数据以及返回。
(2)请求
这里就是了解请求是如何进行传参的,传入的参数有很多类型:
ps:下面所有参数的类型在java中最好都用包装类,有时候,如果没有参数传来的时候,就是null,用基本类型来接收会报错,自动拆箱(会调用方法,报空指针异常)。
a.传递单个参数
类型需要和前端传入的参数类型一致,只有一个参数的时候不需要名称相同。
b.传递多个参数
传入顺序可以不同,但是对应的类型需要相同,这个需要参数名称相同,所以此时为了规避java对象中属性名不同的问题,就引入了@RequestParam,使用该注解,就可指定传入参数的名称,java中的属性名就可以随意取名;该注解中有required属性,可以设置当前参数是否为必传参数。
c.传递对象
需要保证传递的参数名称和参数类型和java对象中的变量匹配的上,不一定对象中全部属性传完,传需要的参数,其他未传的参数就是null,使用的时候按需查询使用。
d.传递数组
需要保证传入的所有参数类型和数组类型相同,参数名称和数组名称随意。
e.传递集合
如果是List,则需保证传递的所有参数类型和List中的类型相同。且必须要使用@RequestParam(否则会报错),才能使用集合来进行接收(针对同一类型的不同数据,浏览器会自动帮我封装成一个数组)
f.传递Json数据
需要使用@RequestBody,一般使用对象来进行接收。
g.获取URL中的数据
需要使用@PathVariable。
h.传递文件
需要使用@RequestPart,和MultiPartFile类来进行接收文件。
I.获取Cookie
法一:使用Spring内置HttpServletRequest对象来获取,通过getCookies方法。
法二:使用@CookieValue,使用该方式只能一个一个去拿。
j.获取Session
法一:使用Spring内置HttpServletResponse对象,并通过getSession来获取session对象,setAttribute方法来设置session中的属性值和getAttribute方法来获取session中的属性值
法二:使用@SessionAttribute来获取属性值(一步到位),加了此注解说明参数是一个必传值。
k.获取Header
法一:使用Spring内置HttpServletRequest对象来获取,通过gerHeader方法
法二:使用@RequestHeader来获取,需要注明Header的名称(是一个必传参数)。
(3)响应:
a.返回静态界面
@Controller:返回视图
b.返回数据
@RequestBody:作用在类上,就是类中所有方法返回数据;作用在方法上,就是对应的方法返回数据。
c.返回Json
返回是对象/集合,content-type:application/json(响应类型)
返回是String类型,content-type:text/html
d.设置状态码和报头
都是使用Spring内置HttpServletResponse对象来进行设置。
4.应用分层
一共有三层:
(1)表现层(controller):接收请求,返回响应
(2)业务逻辑层(service):主要进行逻辑运算和算术处理
(3)数据处理层(dao):数据的存储,读取,修改
应用分层的思想正是体现了高内聚低耦合,也就是同一个板块中元素之间的关系要紧密,不同板块中的元素之间的依赖程度越低越好。
5.Spring,Spring MVC和Spring Boot之间的差别
Spring:是一个开发应用框架,主要功能就是管理对象,以及对象之间的依赖关系,面向切面编程,数据库事务管理,数据访问,Web框架支持。
Spring MVC:是基于Spring实现的一个MVC框架,主要应用网络接口和Web应用,所以Spring MVC是一个web框架。
Spring Boot:是对Spring的进一步封装,是为了简化Spring应用开发而诞生的,使用该框架可以更降低上手难度,极大地提高开发效率,可以集成各种框架从而进行相关功能的开发,eg:想进行web开发就引入MVC,想进行数据库的相关操作,就可以引入mybaits(极大提高开发效率),所以它只是辅助简化应用开发的,让开发变得更简单,甚至不需要额外的web服务器(内置了tomcat:Http服务器),直接打成jar包就可以直接部署运行了。
总结:
Spring包含Spring MVC和Spring Boot,Spring Boot 又包含Spring MVC,Spring MVC是基于Spring实现的MVC框架,Spring Boot是基于Spring的一套快速上手开发的整合包。