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(例如
- 类比:公司的通讯录或地图,根据名字(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。
总结:执行流程图解
为了方便记忆,可以将流程串联如下:
- 用户 发送请求 -> DispatcherServlet (接收)
- DispatcherServlet -> HandlerMapping (询问:谁来处理这个 URL?)
- HandlerMapping -> 返回 Handler (找到了)
- DispatcherServlet -> HandlerAdapter (命令:去运行这个 Handler)
- HandlerAdapter -> Controller (执行业务逻辑) -> 返回 ModelAndView
- DispatcherServlet -> ViewResolver (询问:这个视图名对应的文件在哪?)
- ViewResolver -> 返回 View 对象
- DispatcherServlet -> View (命令:把数据填进去渲染)
- View -> 返回响应给 用户
餐厅类比法
- DispatcherServlet: 餐厅经理(接待顾客,指挥全场)。
- HandlerMapping: 菜单/点单系统(知道哪道菜对应哪个厨师)。
- HandlerAdapter: 厨房领班(指挥具体的厨师干活)。
- Controller: 厨师(负责切菜炒菜,处理食材)。
- ViewResolver: 摆盘说明书(决定用圆盘子还是方盘子)。
- View: 最终端上桌的菜肴(HTML页面)。
右滑查看面试常问