封面图片来源
文章参考
视频参考

概述

MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。SpringMVC可以帮助我们进行更简洁的Web层的开发,并且它天生与 Spring 框架集成。SpringMVC下我们一般把后端项目分为 Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面).

SpringMVC的核心组件

  • DispatcherServlet:核心的中央处理器,负责接收请求、分发,并给予客户端响应
  • HandlerMapping:处理器映射器,根据URL去匹配查找能处理的Handler,并会将请求涉及到的拦截器和 Handler 一起封装。
  • HandlerAdapter:处理器适配器,根据 HandlerMapping 找到的 Handler ,适配执行对应的 Handler
  • Handler:请求处理器,处理实际请求的处理器。
  • ViewResolver:视图解析器,根据 Handler 返回的逻辑视图 / 视图,解析并渲染真正的视图,并传递给 DispatcherServlet 响应客户端

SpringMVC 工作原理


流程说明

  1. 客户端(浏览器)发送请求, DispatcherServlet拦截请求。
  2. DispatcherServlet根据请求信息调用HandlerMappingHandlerMapping 根据 URL 去匹配查找能处理的Handler(也就是我们平常说的Controller控制器),并会将请求涉及到的拦截器和Handler一起封装。
  3. DispatcherServlet调用HandlerAdapter适配器执行Handler
  4. Handler完成对用户请求的处理后,会返回一个 ModelAndView 对象给DispatcherServletModelAndView顾名思义,包含了数据模型以及相应的视图的信息。Model是返回的数据对象,View是个逻辑上的View
  5. ViewResolver 会根据逻辑View 查找实际的View
  6. DispaterServlet 把返回的 Model 传给 View(视图渲染)。
  7. View 返回给请求者(浏览器)

  • 上述流程是传统开发模式(JSP,Thymeleaf 等)的工作原理。然而现在主流的开发方式是前后端分离,这种情况下 Spring MVC 的 View 概念发生了一些变化。由于 View 通常由前端框架(Vue, React 等)来处理,后端不再负责渲染页面,而是只负责提供数据,因此:
    • 前后端分离时,后端通常不再返回具体的视图,而是返回纯数据(通常是 JSON 格式),由前端负责渲染和展示。
    • View 的部分在前后端分离的场景下往往不需要设置,Spring MVC 的控制器方法只需要返回数据,不再返回 ModelAndView,而是直接返回数据,Spring 会自动将其转换为 JSON 格式。相应的,ViewResolver 也将不再被使用。
  • 怎么做到呢?
    • 使用@RestController注解代替传统的@Controller注解,这样所有方法默认会返回 JSON 格式的数据,而不是试图解析视图。
    • 如果你使用的是@Controller,可以结合@ResponseBody注解来返回JSON。