基于本文回答
0
评论

Spring MVC 的五大核心组件

知识点图片

Spring MVC 是基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架。其核心架构围绕着 DispatcherServlet(前端控制器)展开,通过它来协调其他组件完成请求的处理。

以下是 Spring MVC 的 五大核心组件,以及它们的作用和执行流程:

1. DispatcherServlet (前端控制器)

  • 地位:整个 Spring MVC 框架的核心,也是大脑。
  • 作用
    • 接收用户发送的 HTTP 请求。
    • 作为统一的入口,负责协调和分发任务给其他组件(如 Mapping, Adapter, ViewResolver 等)。
    • 减少了其他组件之间的耦合度。
  • 类比:公司的前台调度中心,所有客户(请求)先找它,它再告诉客户该去哪个部门。

2. HandlerMapping (处理器映射器)

  • 地位:负责“寻路”。
  • 作用
    • 根据请求的 URL(例如 /user/login),找到对应的 Handler(处理器/控制器)以及相关的拦截器(Interceptors)。
    • 它返回一个 HandlerExecutionChain 对象给 DispatcherServlet。
  • 类比:公司的通讯录地图,根据名字(URL)找到具体的员工(Controller)。

3. HandlerAdapter (处理器适配器)

  • 地位:负责“执行”。
  • 作用
    • 因为 Spring MVC 支持多种类型的处理器(如注解式 Controller、实现接口的 Controller 等),DispatcherServlet 无法直接调用它们。
    • HandlerAdapter 作为一个适配器,按照特定的规则去执行 HandlerMapping 找到的 Handler。
    • 执行完毕后,返回 ModelAndView 对象(包含模型数据和逻辑视图名)。
  • 类比万能插头翻译官。不管具体的员工讲什么语言(代码写法),适配器都能让他开始工作。

4. ViewResolver (视图解析器)

  • 地位:负责“查找视图”。
  • 作用
    • 接收 DispatcherServlet 传来的逻辑视图名(例如 return "success")。
    • 将其解析为具体的 View 对象(例如找到 /WEB-INF/jsp/success.jsp 或 Thymeleaf 模板文件)。
  • 类比文件档案管理员。你告诉他文件名(逻辑名),他帮你找到文件的具体物理路径。

5. View (视图)

  • 地位:负责“渲染”。
  • 作用
    • 将模型数据(Model)填充到页面中,进行渲染。
    • 最终生成用户能看到的响应(如 HTML、JSON、PDF、Excel 等)。
    • 常用的视图实现类包括 InternalResourceView (JSP), ThymeleafView 等。
  • 类比画师打印机。把数据画成一张漂亮的网页展示给用户。

补充:Controller (处理器/Handler)

虽然通常所说的“五大组件”指上述框架内部组件,但 Controller 是开发者最常接触的部分。

  • 作用:编写业务逻辑,处理具体的请求,调用 Service 层,返回 ModelAndView。

总结:执行流程图解

为了方便记忆,可以将流程串联如下:

  1. 用户 发送请求 -> DispatcherServlet (接收)
  2. DispatcherServlet -> HandlerMapping (询问:谁来处理这个 URL?)
  3. HandlerMapping -> 返回 Handler (找到了)
  4. DispatcherServlet -> HandlerAdapter (命令:去运行这个 Handler)
  5. HandlerAdapter -> Controller (执行业务逻辑) -> 返回 ModelAndView
  6. DispatcherServlet -> ViewResolver (询问:这个视图名对应的文件在哪?)
  7. ViewResolver -> 返回 View 对象
  8. DispatcherServlet -> View (命令:把数据填进去渲染)
  9. View -> 返回响应给 用户

餐厅类比法

  • DispatcherServlet: 餐厅经理(接待顾客,指挥全场)。
  • HandlerMapping: 菜单/点单系统(知道哪道菜对应哪个厨师)。
  • HandlerAdapter: 厨房领班(指挥具体的厨师干活)。
  • Controller: 厨师(负责切菜炒菜,处理食材)。
  • ViewResolver: 摆盘说明书(决定用圆盘子还是方盘子)。
  • View: 最终端上桌的菜肴(HTML页面)。
右滑查看面试常问