SpringMVC
使用配置类替换web.xml
AbstractDispatcherServletInitializer是springMVC提供快速初始化web3.0容器的抽象类
- createServletApplicationContext
- 加载SpringMVC环境
- 加载SpringMVC对象的Bean放入webApplication对象范围中
- getservletMappings
- 设置SpringMVC对应的请求映射路径
- createRootApplicationContext
- 加载非SpringMVC对应的bean,加载spring环境
工作流程解析
启动服务器初始化过程
- 服务器启动执行ServletContainersInitconfig类,初始化web容器
- createServletApplicationContext
- 创建webApplication对象,加载SpringMVC的配置类
- 加载SpringMVc配置类,执行@ComponentScan加载对应的bean
- 加载@Controller,建立@RequestMapping路径与方法的对应关系
单次请求过程
- 发送请求
- web容器判断请求是否满足SpringMVC拦截规则
- 解析请求路径并匹配对应的方法
- 执行方法进行处理并返回
bean加载控制
- 加载
- SPringMVC控制表现层相关的bean
- spring控制数据层与逻辑层的bean
- 方式
- 修改spring设置精准扫描
- 设置过滤器
- excludeFilters
- 排除指定路径
- includeFilters
- excludeFilters
请求与响应
设置请求映射路径
- @RequestMapping在类上方设置+在方法名上方设置=类上路径+方法上的路径
请求参数
- GET发送参数
- 参数在路径中,直接在方法参数中接受
- 中文乱码,在tomcat中配置uriEncoding为UTF-8
- POST发送参数
- 直接使用方法参数进行接收
- 中文乱码,在ServletContainersInitConfig类中覆写getServletFilers方法,添加characterEncondingFilter
- 五种类型参数传递‘
- 普通参数
- 使用方法参数进行接收,参数名称不一致添加@RequestParam注解
- POJO数据类型
- 使用POJO类对象接收,请求参数必须跟pojo类中属性名称一致
- 嵌套POJO数据类型
- 请求参数名与形参名对应即可
- 数组类型
- 同名请求参数可以直接存放到对应名称的数组对象中
- 集合类型
- 使用@Requestparam注解可将请求参数存储到集合对象中,不使用该注解会报错
- 普通参数
- JSON数据传输
- 使用方法
- 在pom.xml中添加依赖,springMVC默认使用jackson处理json转换
- 在springMVCconfig类上添加@EnableWebMvc:开启json数据类型自动转换
- 在方法参数前添加@RequestBody,将外部json映射到形参集合对象中
- 普通数组
- @RequestBody List likes
- 对象数据
- @RequestBody User user
- 对象数组
- @RequestBody List list
- @RequestBody 用于接收json数据,@Requestparam用于接收url数据
- 使用方法
- 日期类型参数传递
- @DateTimeFormat
- 形参注解
- springMVC控制器方法形参前面
- pattern指定日期时间格式字符串
- @DateTimeFormat
- springMVC类型转换,框架提供很多类型转换接口和实现类
- Converter接口
- string→Integer
- string→Date
- HttpMessageConverter接口
- 实现对象与json之间的转换
- Converter接口
响应
- 响应页面
- 直接返回页面的字符串
- 类上方不能添加@ResponseBody
- 返回文本数据
- 类上方添加@ResponseBody
- 直接返回字符串
- 响应JSON数据
- 类上方添加@ResponseBody
- 返回对象会将其转换成json响应给前端
REST风格
- 隐藏资源访问行为,无法通过地址得知操作,书写简化
- 使用@RestController替换@Controller + ReponseBody
- @GetMapping @PostMapping @PutMapping @DeleteMapping
- @RequestMapping+@GetMapping=类上方路径+方法上路径
- @PathVariable
- 用于接收路径参数,使用{参数名称}描述路径参数,通常用于接收id值