2.1 SpringMVC简介
- SpringMVC技术与Servlet技术功能等同,均属于web层或者说表现层开发技术
- SpringMVC概述
- SpringMVC入门案例 (实例见D:\JavaSSM阶段源代码\springmvc_01_quickstart)
- 表现层的bean用@Controller这个注解,这个注解是springmvc定义bean的专用注解
三个springmvc所需要的注解:
- 一次性工作一次工程只用做一次,需要多次做的就是处理请求的控制器类中的方法。以下就是控制器类,存在一个save方法
固定格式写个 /
- 入门案例工作流程分析
注意:
- config目录存入的是配置类
- controller目录存放的是SpringMVC的controller功能类
- service目录存放的是service接口和实现类
- dao目录存放的是dao/Mapper接口
- SpringMVC加载的相关bean (表现层bean),也就是controller包下的类
简化开发:
- PostMan插件简介
总结
2.2 请求与响应
- 请求映射路径 (实例见D:\JavaSSM阶段源代码\springmvc_03_request_mapping)
- 请求方式 (实例见D:\JavaSSM阶段源代码\springmvc_04_request_param)
- Get请求传参
- Post请求传参
- 请求参数 (实例见D:\JavaSSM阶段源代码\springmvc_04_request_param)
- 参数种类(五种)
-
- 普通参数
注解:
-
- 嵌套POJO类型参数(一个实体类中包含了另一个实体类)
-
- 集合类型参数
- 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个@RequestParam绑定参数关系
- 对于简单数据类型使用数组会比集合更简单些
@RequestParam
名称 |
@RequestParam |
类型 |
形参注解 |
位置 |
SpringMVC控制器方法形参定义前面 |
作用 |
绑定请求参数与处理器方法形参间的关系 |
相关参数 |
required:是否为必传参数 defaultValue:参数默认值 |
- 请求参数(传递json数据) (实例见D:\JavaSSM阶段源代码\springmvc_04_request_param)
- json数组
- json对象(POJO参数)
- json数组 (POJO集合参数)
步骤:
注解:
- 日期类型参数传递 (实例见D:\JavaSSM阶段源代码\springmvc_04_request_param)
对于日期类型参数通过@DateTimeFormat注解指定日期格式,用的参数叫Pattern。如果日期格式是以/分割且只有年月日则不用加这个注解。此形式是spring的默认形式
注解:
- 响应 (实例见D:\JavaSSM阶段源代码\springmvc_05_response)
- 响应页面
注意:
- 返回jsp文件不需要加ResponseBody注解
- 响应数据
-
- 文本数据
-
- json数据
给一个对象自动变成json数据
注解:
这个注解可以将对象数据转为json,里面是HttpMessageConverter这个类型转换器(接口)在做事情
2.3 REST风格
- REST简介
REST其实就是表示访问网络资源的格式
注意:
- 行为动作其实就是请求方法
- SpringMVC支持八种,我们常用四种(get 查询,post 新增,put 修改,delete 删除)
- 入门案例 (实例见D:\JavaSSM阶段源代码\springmvc_06_rest)
- RESTful快速开发 (实例见D:\JavaSSM阶段源代码\springmvc_06_rest)
注解:
- 案例:基于RESTful页面数据交互 (实例见D:\JavaSSM阶段源代码\springmvc_07_rest_case)
实现接口,重写方法
小结
放行静态资源访问是一次性工作
2.4 SSM整合
- SSM整合 (实例见D:\JavaSSM阶段源代码\springmvc_08_ssm)
总结:
- Spring整合Mybatis
Spring配置类
数据源properties配置
MyBatis配置类
数据层接口
业务层接口
事务处理
- Spring整合SpringMVC
web配置类
springmvc配置类
Controller开发
- 表现层数据封装 (实例见D:\JavaSSM阶段源代码\springmvc_09_resulte)
注意:
- 我们后端增删改,查单条,查全部的格式都不一样(boolean类型,json数据,数组)。日后可能会有更多的格式,前端解析不方便,所以我们要变成统一格式方便前端人员使用
我们定义一个统一数据返回结果类,用来封装协议:
data:数据
code:编码(每个操作都有对应的独立的编码)
msg:特殊消息(比如如果没有元素就可以再msg中写一句话)
- 当然,并没有规定这个类只能存在这三个属性。
- 异常处理器 (实例见D:\JavaSSM阶段源代码\springmvc_10_exception)
实例代码如下:
- 写完这个异常处理的类后要记得在SpringMvc.Config中通过@ComponentScan注解加载配置(扫描到包就行)
注解:
- 项目异常处理方案 (实例见D:\JavaSSM阶段源代码\springmvc_10_exception)
项目异常处理步骤:
- 业务异常直接处理,给用户传递一个消息
- 系统级异常和未知异常则要根据情况处理
- 案例:SSM整合标准开发 (实例见D:\JavaSSM阶段源代码\springmvc_11_page)
2.5 拦截器
- 拦截器概念
例如权限管理就需要用到拦截器,如果没有权力就不让它走到Controller中
- 拦截器(Interceptor)是一种动态拦截方法调用的机制 (拦截器就是一种做增强的工作机制,可以在控制器的前或后执行)
- 作用:
-
- 在指定的方法调用前后执行预先设定好的代码
- 阻止原始方法的执行
过滤器是在tomcat服务器上配置的,所以它可以对所有的访问进行增强
- 入门案例 (实例见D:\JavaSSM阶段源代码\springmvc_12_interceptor)
示例代码如下:
示例代码如下:
使用这种形式可以直接在SpringMvcConfig配置类中继承接口实现了拦截器的方法后,就不需要扫描com.itheima.config这个包了
- 拦截器参数 (实例见D:\JavaSSM阶段源代码\springmvc_12_interceptor)
a. 前置处理
b. 后置处理
c. 完成后处理
- 多拦截器执行顺序 (实例见D:\JavaSSM阶段源代码\springmvc_12_interceptor)
a. 当所有preHandle方法返回true时,执行顺序如下:
b. 假如第3个preHandle方法返回false,执行顺序如下:
c. 假如第2个preHandle方法返回false,执行顺序如下:
d. 假如第1个preHandle方法返回false,执行顺序如下:
一个afterCompletion方法都不会运行
小结: