Spring MVC的处理流程

76 阅读2分钟

概述

用户发送url请求到DispatcherServlet,也就是前端处理器,然后前端处理器去HandlerMapping(处理器映射器)中获取相应的Handler,再根据这个Handler去处理器适配器中获取相应的适配器,然后通过适配器的处理,返回ModelAndView,前端处理器将这个ModelAndView传给ViewReslover(视图解析器),然后视图处理器返回View,然后前端处理器对View进行渲染相应给用户

1. 用户发起请求

  • 客户端(浏览器等)发送 HTTP 请求至服务器,请求首先被 DispatcherServlet(前端控制器)拦截。

2. 请求映射(HandlerMapping)

  • DispatcherServlet 查询 HandlerMapping,根据请求的 URL、参数等信息,找到匹配的 处理器(Handler) ,通常对应 @Controller 注解的类中的方法。
  • 示例:RequestMappingHandlerMapping 处理 @RequestMapping 注解。

3. 处理器适配(HandlerAdapter)

  • DispatcherServlet 通过 HandlerAdapter 执行处理器。适配器模式使得不同类型的 Controller(如基于注解、传统实现类)能统一调用。
  • 示例:RequestMappingHandlerAdapter 处理 @Controller 方法。

4. 执行处理器(Controller 方法)

  • 调用 Controller 方法,处理业务逻辑(可能涉及 Service 层、数据库操作等)。
  • 参数绑定:SpringMVC 自动将请求参数、路径变量、表单数据等绑定到方法参数(如 @RequestParam@PathVariable)。
  • 数据校验:可选使用 @Valid 注解进行数据验证。

5. 返回处理结果

  • 处理器返回 ModelAndView(包含模型数据和视图名)或直接返回数据(如 REST 接口返回 JSON)。
  • 若使用 @ResponseBody 或 @RestController,结果会通过 HttpMessageConverter 直接序列化为 JSON/XML 等格式,跳过视图解析。

6. 解析视图(ViewResolver)

  • 若返回视图名称,DispatcherServlet 调用 ViewResolver 将逻辑视图名解析为具体的视图对象(如 JSP、Thymeleaf 模板)。
  • 示例:InternalResourceViewResolver 解析 JSP 路径。

7. 渲染视图(View 层)

  • 视图对象将模型数据填充到模板中,生成最终响应内容(如 HTML 页面)。
  • 非视图场景(如返回 JSON)直接输出数据。

8. 返回响应

  • DispatcherServlet 将渲染结果返回客户端,完成请求处理。