1.SpringMVC概述
- Spring 是父框架、基础容器;SpringMVC 是 Spring 的一个子模块,专做 Web 层控制。SpringMVC 离不开 Spring,但 Spring 可以独立存在。
- SpringMVC技术与Servlet技术功能等同,均属于web层开发技术
- SpringMVc是一种基于Java实现MVc模型的轻量级Web框架
- 优点
- 使用简单,开发便捷(相比于Servlet)
- 灵活性强

1.SpringMVC是一种表现层框架技术
2.SpringMVC用于进行表现层功能开发
2.SpringMVC入门案例
①:使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

②:创建SpringMVC控制器类(等同于Servlet功能)

③:初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

④:初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

- 名称:@Controller
- 类型:类注解
- 位置:SpringMVC控制器类定义上方
- 作用:设定SpringMVC的核心控制器bean
- 范例:

- 名称:@RequestMapping
- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径
- 范例:

- 相关属性:
- value(默认):请求访问路径
- 名称:@ResponseBody
- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法响应内容为当前返回值,无需解析
- 范例:

SpringMVC入门程序开发总结(1+N)
- 一次性工作
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
- SpringMVC核心配置类(设置配置类,扫描controller包,加载controller控制器bean)
- 多次工作
- 定义处理请求的控制器类
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
AbstractDispatcherServletInitializer类是SpringMvc提供的快速初始化Web3.0容器的抽象类
- AbstractDispatcherServletInitializer提供三个接口方法供用户实现
- createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVc对应的bean并放入WebApplicationContext对象范围中,而webApplicationContext的作用范围为ServletContext范围,即整个web容器范围

- getServletMappings()方法,设定SpringMVc对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVc进行处理

- createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringMVc对应的bean,使用当前方法进行使用方式同createServletApplicationContext()

3.入门案例工作流程分析
启动服务器初始化过程
1.服务器启动,执行ServletContainersInitConfig类,初始化web容器
2.执行createServletApplicationContext方法,创建了WebApplicationContext对象
- 加载SpringMvcConfig
4.执行@ComponentScan加载对应的bean
5.加载UserController,每个@RequestMapping的名称对应一个具体的方法
ServletContext
6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

单次请求过程
1.发送请求localhost/save
2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
3.解析请求路径/save
4.由/save匹配执行对应的方法save()
5.执行save()
6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方
4.Bean加载控制
因为功能不同,如何避免Spring错误的加载到SpringMvc的bean?
加载Spring控制的bean的时候,排除掉SpringMVc控制的bean
Controller加载控制与业务bean加载控制
- SpringMVc相关bean(表现层bean)
- Spring控制的bean
- 业务bean (Service)
- 功能bean(DataSource等)
- SpringMVc相关bean加载控制
- SpringMvc加载的bean对应的包均在com.itheima.controller包内
- Spring相关bean加载控制
- 方式一:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean
- 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
- 方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中

- 名称:@ComponentScan
- 类型:类注解
- 范例:

- 属性
- excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
- includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)
- bean的加载格式

- 简化开发

5.PostMan介绍

PostMan简介
- Postman是一款功能强大的网页调试与发送网页HTTP请求的chrome插件
- 作用:常用于进行接口测试
- 特征
- 简单
- 实用
- 美观
- 大方
PostMan基本使用
- 注册登录
- 创建工作空间/进入工作空间
- 发起请求测试结果
6.设置请求映射路径
1.团队多人开发,每人设置不同的请求路径,冲突问题如何解决?
设置模块名作为请求路径前缀
请求映射路径
- 名称:@RequestMapping
- 类型:方法注解 类注解
- 位置:SpringMVc控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
- 范例:

- 属性
- value(默认):请求访问路径,或访问路径前缀
7.get请求与post请求普通参数
Get请求传参
- 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数


Post请求参数
- 普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数


Post请求中文乱码处理
- 为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器

8.五种类型参数传递
请求参数
- 参数种类
- 普通参数
- POJO类型参数
- 嵌套POJO类型参数
- 数组类型参数
- 集合类型参数
名称:@RequestParam
类型:形参注解
位置:SpringMVc控制器方法形参定义前面
作用:绑定请求参数与处理器方法形参间的关系
范例:

参数:
required:是否为必传参数
defaultValue:参数默认值
- POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数


- 嵌套POJO参数:POJO对象中包含POJO对象

- 嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数


- 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数


- 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系


9.json数据传递参数
请求参数(传递json数据)
- json数组
- json对象(POJO)
- json数组(POJO)
①:添加json数据转换相关坐标

②:设置发送json数据(请求body中添加json数据)

③:开启自动转换json数据的支持

注意事项:
@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换
④:设置接收json数据

名称:@EnableWebMvc
类型:配置类注解
位置:SpringMVC配置类定义上方
作用:开启SpringMVC多项辅助功能
范例:

名称:@RequestBody
类型:形参注解
位置:SpringMVc控制器方法形参定义前面
作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
范例:

- POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数


@RequestBody与@RequestParam区别
- 区别
- @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
- @RequestBody用于接收json数据【application/json】
- 应用
- 后期开发中,发送json格式数据为主,@RequestBody应用较广
- 如果发送非json格式数据,选用@RequestParam接收请求参数
10.日期类型参数传递
- 日期类型数据基于系统不同格式也不尽相同
- 2088-08-18
- 2088/08/18
- 08/18/2088
- 接收形参时,根据不同的日期格式设置不同的接收方式


名称:@DateTimeFormat
类型:形参注解
位置:SpringMVc控制器方法形参前面
作用:设定日期时间型数据格式
范例:

- 属性:pattern:日期时间格式字符串
类型转换器
- Converter接口
- 请求参数年龄数据(String-->Integer)
- 日期格式转换(String-->Date)
- @EnableWebMvc功能之一:根据类型匹配对应的类型转换器
11.响应
-
响应页面
-
响应数据
- 文本数据
- json数据
-
响应文本数据(了解)

- 响应json数据(对象转json)

- 响应json数据(对象集合转json数组)

名称:@ResponseBody
类型:方法注解
位置:SpringMVc控制器方法定义上方
作用:设置当前控制器方法响应内容为当前返回值,无需解析
范例:

- HttpMessageConverter接口
