Spring MVC - 介绍
- Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就包含在 Spring 框架中。正式名称“Spring Web MVC”来自其源模块的名称(
spring-webmvc
),但它更常见的名称是“Spring MVC”。
1. MVC 架构
- Model(模型):代表应用程序的数据和业务逻辑。
- View(视图):负责向用户展示数据,通常是一个 HTML 页面,也可以是 XML、JSON 或其他格式。
- Controller(控制器):处理用户请求,调用模型服务并决定显示哪个视图。
2. Spring MVC 优点
- 松耦合:通过依赖注入(DI)和面向接口编程,组件之间保持低耦合,易于测试和维护。
- MVC 设计模式:分离关注点,使代码结构清晰,便于维护和扩展。
- 请求处理:支持多种 HTTP 请求类型(GET、POST、PUT、DELETE 等)和 URL 映射。
- 数据绑定:自动将 HTTP 请求参数绑定到 Java 对象上,简化了参数处理。
- 数据验证:提供数据验证框架,确保数据符合预期的格式和规则。
- 视图解析:使用视图解析器将逻辑视图名称映射为实际的视图技术(如 JSP、Thymeleaf、FreeMarker 等)。
- 国际化:支持多语言和区域设置,允许创建多语言的应用程序。
- 异常处理:提供异常处理机制,可以优雅地处理运行时错误。
3. SpringMVC 实现原理
- Spring MVC 实现原理主要包括几个关键组件以及它们之间的交互流程。下面是 Spring MVC 主要组件和处理流程的概述:
3.1 关键组件
-
DispatcherServlet
:- 这是 Spring MVC 的前端控制器,负责接收所有的 HTTP 请求并将它们分发到正确的处理器。
- DispatcherServlet 读取配置文件(通常是 XML 或 Java 配置类),初始化 MVC 框架的各种组件。
-
HandlerMapping
:- 用于将请求映射到具体的处理器(Controller)。它根据请求的 URL、HTTP 方法等信息来决定哪个控制器应该处理这个请求。
-
HandlerAdapter
:- 一旦 HandlerMapping 找到了处理器,HandlerAdapter 就会被用来调用处理器的方法。它知道如何调用各种类型的处理器。
-
Controller
:- 这是处理具体请求的组件,包含了业务逻辑。控制器负责处理请求,准备数据模型,并选择要渲染的视图。
-
ModelAndView
:- 控制器返回的对象,包含了视图名和模型数据。模型数据会被填充到视图中。
-
ViewResolver
:- 用于解析视图名,找到实际的视图组件。例如,它可能将 “home” 解析为 “home.jsp”。
-
View
:- 视图组件负责将模型数据渲染成最终的 HTML 页面或其他格式的响应。
3.2. 处理流程
-
请求到达 DispatcherServlet:
- 用户通过浏览器发送请求到服务器,请求被 DispatcherServlet 接收。
-
寻找处理器:
- DispatcherServlet 查询 HandlerMapping 来找到处理请求的 Controller。
-
调用处理器:
- DispatcherServlet 使用 HandlerAdapter 来调用 Controller 中的具体方法。
-
处理请求:
- Controller 执行业务逻辑,可能从数据库获取数据,处理数据,然后返回一个 ModelAndView 对象。
-
解析视图:
- DispatcherServlet 使用 ViewResolver 解析视图名,找到实际的视图组件。
-
渲染视图:
- 视图组件获取模型数据,将其渲染成 HTML 或其他格式的响应。
-
响应用户:
- 渲染完成的 HTML 页面或响应内容被发送回客户端。