java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring MVC的工作流程

解读Spring MVC的工作流程

作者:qq_44199605

SpringMVC的工作流程是基于模型-视图-控制器(MVC)设计模式的一个典型实现,主要包括用户发送请求到前端控制器(DispatcherServlet)、前端控制器转发请求给处理器映射器(HandlerMapping)

Spring MVC 的工作流程是基于模型-视图-控制器(MVC)设计模式的一个典型实现,以下是其主要工作流程步骤:

Spring MVC 的工作流程

客户端请求发送到前端控制器(DispatcherServlet)

前端控制器转发请求给处理器映射器(Handler Mapping)

处理器映射器找到相应的控制器(Controller)

前端控制器调用目标处理器(Controller)

控制器返回模型数据和视图名称

前端控制器请求视图解析器(View Resolver)

视图解析器生成视图

前端控制器将模型数据传递给视图

视图渲染

前端控制器响应客户端

例子

假设我们有一个简单的 Web 应用程序,用于显示用户的个人信息。当用户访问 /user/1 这个 URL 时,应用程序会展示 ID 为 1 的用户信息。

详细步骤

用户发送请求到服务器: 用户在浏览器中输入 URL /user/1,比如 http://localhost:8080/user/1,这个请求被发送到服务器。

前端控制器(DispatcherServlet)接收请求: Spring MVC 的核心组件 DispatcherServlet 会拦截所有进入的 HTTP 请求。它相当于请求的入口点,负责将请求分发到适当的处理器(Controller)。

通过处理器映射器(Handler Mapping)查找控制器DispatcherServlet 使用处理器映射器(HandlerMapping)查找合适的控制器来处理 /user/1 请求。这个映射过程通常是根据 URL 路径来匹配的。

控制器(Controller)处理请求: 找到合适的控制器后,DispatcherServlet 将请求转发给控制器。控制器包含了应用程序的业务逻辑,负责处理用户请求和返回数据。

@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;
    }
}

在这个例子中:

返回模型和视图给 DispatcherServlet: 控制器方法返回一个 ModelAndView 对象,包含了模型数据(用户信息)和视图名称(userView)。DispatcherServlet 接收这个返回对象。

通过视图解析器(View Resolver)查找视图DispatcherServlet 会将视图名称(如 "userView")交给视图解析器(ViewResolver),由它根据配置找到物理视图文件。

视图解析器生成视图: 视图解析器会找到 userView.jsp 并返回给 DispatcherServlet。此时,视图还没有渲染出用户数据,只是找到了物理文件。

前端控制器将模型数据传递给视图DispatcherServlet 将控制器返回的用户数据(模型)传递给 userView.jsp 视图。视图文件会使用这些数据生成动态的 HTML 页面。

视图渲染: 视图(userView.jsp)结合模型数据进行渲染。比如 JSP 文件中可能会使用表达式 ${user.name} 来显示用户的姓名。

返回响应到客户端: 渲染后的 HTML 页面被返回给客户端(用户的浏览器)。用户最终看到的是包含用户信息的完整页面。

注:

@RestController
public class UserController {
    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") int id) {
        // 从服务层获取用户信息
        return userService.getUserById(id); // 返回的是 User 对象,而不是视图名称
    }
}

传统 Spring MVC 返回视图

Spring Boot RESTful API

总结

Spring MVC 的整个流程可以简单总结为以下几个步骤:

  1. 用户发送请求到 DispatcherServlet
  2. DispatcherServlet 使用 HandlerMapping 查找对应的控制器。
  3. 控制器处理请求,生成 ModelAndView
  4. DispatcherServlet 使用 ViewResolver 解析视图名称。
  5. 将模型数据传递给视图进行渲染。
  6. 将渲染的视图返回给用户。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文