Spring MVC 是基于 Java 的一种轻量级的 Web 框架,采用 MVC(Model-View-Controller)设计模式。它的工作原理大致分为以下几个步骤,核心是通过一系列的组件实现请求的分发、数据的处理与视图的渲染。
Spring MVC 工作流程
-
客户端发送请求:用户通过浏览器发送 HTTP 请求到服务器,Spring 的
DispatcherServlet
会接收到该请求。 -
DispatcherServlet 分发请求:
DispatcherServlet
是 Spring MVC 的核心前端控制器,所有的请求都会由它来分发。它会根据请求路径去寻找合适的处理器(即 Controller)。 -
HandlerMapping 处理映射:
DispatcherServlet
调用HandlerMapping
查找对应的Controller
,根据 URL 地址映射到具体的处理器方法。 -
Controller 处理请求:找到的
Controller
会接收请求,并处理业务逻辑。通常会调用Service
层进行数据处理和业务逻辑运算,并将处理结果封装为Model
数据对象。 -
返回 ModelAndView:处理完请求后,
Controller
将数据返回给DispatcherServlet
。这时返回的是一个包含数据和视图信息的ModelAndView
对象。 -
ViewResolver 视图解析:
DispatcherServlet
调用ViewResolver
对视图名称进行解析,找到对应的视图模板(例如 JSP、Thymeleaf 等)。 -
视图渲染:视图模板引擎将
Model
数据填充到视图模板中,生成最终的 HTML 页面。 -
返回响应:
DispatcherServlet
将渲染好的 HTML 页面响应给客户端,浏览器接收到 HTML 并进行渲染展示。
组件详细介绍
- DispatcherServlet:Spring MVC 的核心控制器,负责接收和分发请求,协调各组件完成请求的处理工作。
- HandlerMapping:用于根据 URL 请求路径找到对应的处理器,即
Controller
。 - Controller:业务逻辑处理器,处理请求,并将数据封装成
ModelAndView
返回。 - ViewResolver:视图解析器,负责将逻辑视图名转换为具体的物理视图。
- ModelAndView:包含处理数据(Model)和视图名称(View)的对象,用于将数据传递给视图。
- View:最终用于呈现给用户的视图,通过模板引擎渲染数据。
Spring MVC 示例代码
java">// Controller 示例
@Controller
public class UserController {@GetMapping("/user/{id}")public ModelAndView getUser(@PathVariable("id") Long id) {User user = userService.getUserById(id);ModelAndView modelAndView = new ModelAndView("userView");modelAndView.addObject("user", user);return modelAndView;}
}
- 配置 ViewResolver(视图解析器):
java">@Configuration
public class WebConfig implements WebMvcConfigurer {@Beanpublic InternalResourceViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");return resolver;}
}
总结
Spring MVC 的核心流程基于 DispatcherServlet
分发请求,通过 HandlerMapping
寻找合适的 Controller
,再经由 ViewResolver
渲染视图,将最终页面返回给客户端。这种流程清晰、可扩展性高,使得 Spring MVC 成为构建 Web 应用的高效框架。