目录Spring MVC 的工作流程例子详细步骤总结Spring MVC 的工作流程是基于模型-视图-控制器(MVC)设计模式的一个典型实现,以下是其主要工作流程步骤:Spring MVC 的工作流程客户端请求发送到前端控制器(DispatcherServlet)
:用户通过浏览器发送请求,该请求首先到达 Spring MVC 的前端控制器DispatcherServlet。
这个类是整个流程的核心,它负责协调其他组件的执行。
前端控制器转发请求给处理器映射器(Handler Mapping)
:DispatcherServlet接收到请求后,依据请求的 URL 查找相应的处理器(Controller)来处理请求。
这个映射由Handler Mapping完成,它根据配置查找具体的处理器。
处理器映射器找到相应的控制器(Controller)
:Handler Mapping根据请求的路径,确定使用哪个Controller来处理请求。
找到之后,它返回Controller的信息给DispatcherServlet。
前端控制器调用目标处理器(Controller)
:DispatcherServlet根据Handler Mapping提供的信息,调用具体的Controller处理请求。
控制器中的业务逻辑会处理客户端的数据,并返回一个ModelAndView对象,包含了模型数据和视图名称。
控制器返回模型数据和视图名称:Controller将处理后的模型数据和视图名称返回给DispatcherServlet。
前端控制器请求视图解析器(View Resolver)
:DispatcherServlet将视图名称交给视图解析器View Resolver由它负责将视图名称解析为具体的视图(比如 JSP、Thymeleaf 等)
视图解析器生成视图:视图解析器会根据配置找到相应的物理视图文件并返回给DispatcherServlet前端控制器将模型数据传递给视图:DispatcherServlet将控制器返回的模型数据传递给解析出来的视图通常这些数据会通过Model或ModelAndView对象传递视图渲染:视图结合模型数据进行渲染生成最终的 HTML 页面前端控制器响应客户端:渲染后的视图由DispatcherServlet返回给客户端(浏览器)
最终用户看到的是处理后的页面内容例子假设我们有一个简单的 Web 应用程序,用于显示用户的个人信息。当用户访问/user/1这个 URL 时,应用程序会展示 ID 为 1 的用户信息。
详细步骤用户发送请求到服务器: 用户在浏览器中输入 URL/user/1,比如http://localhost:8080/user/1,这个请求被发送到服务器。
前端控制器(DispatcherServlet)接收请求: Spring MVC 的核心组件DispatcherServlet会拦截所有进入的 HTTP 请求。它相当于请求的入口点,负责将请求分发到适当的处理器(Controller)。
例子中的请求路径/user/1被DispatcherServlet拦截,准备分配给相应的处理器。
通过处理器映射器(Handler Mapping)查找控制器:DispatcherServlet使用处理器映射器(HandlerMapping)查找合适的控制器来处理/user/1请求。这个映射过程通常是根据 URL 路径来匹配的。
例如,@RequestMapping("/user/{id}")注解可以告诉 Spring 这个方法负责处理/user/{id}的请求。
在我们的例子中,处理器映射器会找到UserController,该控制器负责处理所有与用户相关的请求。
控制器(Controller)处理请求: 找到合适的控制器后,DispatcherServlet将请求转发给控制器。控制器包含了应用程序的业务逻辑,负责处理用户请求和返回数据。
在这个例子中,UserController的方法会接受用户的 ID(比如1),然后从数据库或内存中获取 ID 为 1 的用户信息。
@Controller public class UserController {@RequestMapping("/user/{id}") public ModelAndView getUser(@PathVariable("id") int userId) {// 模拟从数据库获取用户数据User user = userService.getUserById(userId);ModelAndView mav = new ModelAndView("userView");mav.addObject("user", user);return mav;}}
在这个例子中:
getUser方法会从userService获取用户数据,并将该数据存储在ModelAndView对象中,返回给DispatcherServlet。
"userView"是视图的名称,Spring MVC 会根据这个名称来找到合适的视图模板(比如 JSP 页面、Thymeleaf 页面等)。
mav.addObject("user", user)将用户信息存储在模型中,供视图使用。
返回模型和视图给 DispatcherServlet: 控制器方法返回一个ModelAndView对象,包含了模型数据(用户信息)和视图名称(userView)。
DispatcherServlet接收这个返回对象。
通过视图解析器(View Resolver)查找视图:DispatcherServlet会将视图名称(如"userView")交给视图解析器(ViewResolver),由它根据配置找到物理视图文件。
视图解析器生成视图: 视图解析器会找到userView.jsp并返回给DispatcherServlet。此时,视图还没有渲染出用户数据,只是找到了物理文件。
前端控制器将模型数据传递给视图:DispatcherServlet将控制器返回的用户数据(模型)传递给userView.jsp视图。视图文件会使用这些数据生成动态的 HTML 页面。
视图渲染: 视图(userView.jsp)结合模型数据进行渲染。比如 JSP 文件中可能会使用表达式${user.name}来显示用户的姓名。
返回响应到客户端: 渲染后的 HTML 页面被返回给客户端(用户的浏览器)。用户最终看到的是包含用户信息的完整页面。
注:
在使用 Spring Boot 进行前后端分离开发时,后端只负责提供数据接口(通常以 RESTful API 的形式),前端负责渲染页面和处理用户交互。
这种架构在 Spring Boot 中表现为 RESTful API,而不再像传统 Spring MVC 那样返回视图。
与传统 MVC 不同,Controller使用@RestController,直接返回 Java 对象,而不返回视图。
Spring Boot 会自动将返回的对象序列化为 JSON 或 XML。
@RestController public class UserController {@GetMapping("/user/{id}") public User getUser(@PathVariable("id") int id) {// 从服务层获取用户信息return userService.getUserById(id); // 返回的是 User 对象,而不是视图名称}}传统 Spring MVC 返回视图:返回的是视图文件(如 JSP 页面)通过服务端渲染动态 HTML。
控制器返回ModelAndView对象,包含视图名称和模型数据。
使用 JSP、Thymeleaf 等视图引擎渲染视图。
Spring Boot RESTful API:返回的是 JSON 或 XML 格式的数据,由前端或客户端负责渲染。
使用@RestController,控制器直接返回对象,Spring Boot 自动将其转换为 JSON。
总结Spring MVC 的整个流程可以简单总结为以下几个步骤:用户发送请求到DispatcherServlet。
DispatcherServlet使用HandlerMapping查找对应的控制器。
控制器处理请求,生成ModelAndView。
DispatcherServlet使用ViewResolver解析视图名称。
将模型数据传递给视图进行渲染。
将渲染的视图返回给用户。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:Spring MVC如何设置响应SpringMVC+MyBatis实现多数据源切换SpringMVC Idea 搭建 部署war的详细过程Spring MVC核心组件与请求处理流程分析详解Spring MVC优雅处理异常的6种方式使用WebMvcConfigurer配置SpringMVC过程
