什么是 MVC?
MVC 是一种思想, 是一种软件架构设计模式, 他把软件系统分为模型, 视图, 控制器三部分
Model 模型: 处理程序中数据逻辑部分 (真正干活的)
View 视图: 界面显示, 人机交互
Contoller 控制器: 控制管理, 选择处理模型
什么是 Spring MVC (Spring Web MVC)
简单来说: Spring MVC 是一个实现了 MVC 思想的 Web 框架
Spring MVC 是 MVC 思想的一种实现, 是基于 Servlet API 构建一个 Web 框架, 它一开始就包含在 Spring Framwork 中
Spring MVC 在实现 MVC 思想时, 结合了一些自身特点:
Spring Boot 和 Spring MVC
可以使用 Spring Boot 来创建 Spring MVC 项目
Spring Boot 是创建 Spring MVC 项目的一种方式
在 Spring Boot 中 引入依赖 – Spring Web
引入依赖后, 就可以实现 web 功能
应用分层
应用分层: 是一种 软件开发设计思想 , 将应用程序分为 N 个层次, 每层分别负责各自的职能. 多层之间协同提供完整的功能. 常分为 三层架构, 四层架构 ( MVC 设计模式, 是 应用分层的一种体现 )
三层架构
三层架构 : 是一种在 前后端分离 的设计模式中, 后端开发者常用的分层架构
它将后端开发内容, 分成三部分
- 表现层 : 展示数据结果, 接收用户指令 (对应于 MVC 架构中的 Controller + View)
- 业务逻辑层 : 处理具体的业务逻辑 (对应于 MVC 架构中的 Service )
- 数据层 : 存储, 管理应用程序的相关数据 (对应于 MVC 架构中的 Dao)
MVC 和 三层架构
二者从不同角度对软件工程进行了抽象
MVC 强调数据和视图分离, 将 数据处理和数据展示 分开, 通过 控制器 对二者进行组合
三层架构 强调不同维度数据处理的高内聚和解耦合, 将 交互界面, 业务处理和数据库操作 分开
但是二者都有共同的 : 解耦, 分层, 代码复用
Spring Web MVC 的常用注解
学习 Spring MVC , 其实就是学习各种 Web 开发需要用到的注解
@RequestMapping
路由映射, 建立客户端和服务器连接的桥梁
注解内容
@RequestParam
后端参数重命名, 绑定集合
默认情况下, 请求中参数名相同的多个值, 是 封装到数组中, 如果想要以集合的方式接收, 需要使用 该注解 绑定参数关系
注解内容
@RequestBody
接收 JSON 类型参数 (从请求正文中)
注解内容
此处解释 JSON: 一种数据格式, 本质就是一串字符串, 用来在不同语言中的数据传递和转换.
JSON 特点:
- 简单易用
- 跨平台: 就是一串字符串, 只要对应平台能够解析, 就能够使用
- 轻量级: 相对于 “笨重的” xml 文件而言
- 易拓展: 随意增删属性
- 安全: 纯文本格式, 不含任何可执行代码, 也就不会执行恶意代码
PathVariable
接收路径参数
注解内容
RequestPart
上传文件
注解详解
有关 Cookie 和 Session 中的注解
Cookie: 客户端存储用户信息的机制
Session: 服务器存储用户信息的机制 (就是一个特殊对象, 本质是 “哈希表”)
Cookie 和 Session 通过 SessionId 关联, SessionId 是 Cookie 和 Session 之间的 一种 桥梁
客户端和服务器通过 SessionId 交互流程
- 用户提供账号和密码, 服务器进行验证
- 服务器验证通过, 将用户信息存储在 Session 中, 并将 SessionId 以 Set-Cookie 的方式返回给客户端
- 客户端收到响应, 把 SessionId 存储到 Cookie 中
- 客户端再次访问服务器时, 会带着 SessionId
- 服务器收到请求后, 会根据 SessionId 去查找 Session, 如果能查到, 就根据 Session 进行后续操作, 如果查不到, 就会创建新的 Session 会话
获取 Cookie 值
- 通过 Spring MVC 提供的内置对象
HttpServletRequest
- 通过注解
@CookieValue
Session 的存储和获取
- 基于
HttpServletRequest
和HttpServletResponse
- 基于
HttpSession
- 基于注解
@SessionAttribute
@RestController 和 Controller
@RestController = @Controller + @ResponseBody
@Controller : 将当前类交给 Spring 管理 (控制反转)
@ResponseBody : 返回的 数据格式 为 非视图 ( text/html )
对于 @ResponseBody 来说
修饰方法 : 表示本方法返回的数据格式是非视图
修饰类 : 相当于给类中的每个方法都添加了一个 @ResponseBody 注解