SpringMVC的执行流程

  1. 请求到达 DispatcherServlet

    • 请求拦截:所有的后端请求首先会到达DispatcherServlet。它是 SpringMVC 的前端控制器,类似于一个总调度员,负责接收和处理所有进入系统的 HTTP 请求。它会拦截请求,获取请求的基本信息,包括请求方法(GET、POST 等)、请求 URL、请求头和请求参数等内容。
    • 加载配置信息DispatcherServlet在初始化时会加载 SpringMVC 的配置文件(可以是 XML 配置或者基于 Java 的配置)。这些配置文件包含了诸如处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)等组件的配置信息,用于后续的请求处理流程。
  2. HandlerMapping 查找处理器方法

    • 路径匹配HandlerMapping根据请求的 URL 和配置信息来查找能够处理该请求的处理器方法。在基于注解的 SpringMVC 中,@RequestMapping(包括其变体,如@GetMapping@PostMapping等)注解用于将 URL 路径映射到Controller类中的方法。例如,如果有一个请求的 URL 是/api/products/{id}HandlerMapping会查找Controller类中带有@GetMapping("/api/products/{id}")注解的方法。
    • 参数匹配:除了路径匹配外,HandlerMapping还会考虑请求参数等其他因素来确定最合适的处理器方法。例如,对于一个带有查询参数的请求/api/products?category=electronics,它会寻找能够处理这种带有特定查询参数的方法。
  3. HandlerAdapter 调用处理器方法

    • 适配调用:当HandlerMapping找到合适的处理器方法后,HandlerAdapter负责实际调用这个方法。不同类型的处理器方法(例如,基于传统接口的处理器和基于注解的处理器)可能需要不同的调用方式,HandlerAdapter会进行适配。它会将请求对象(如HttpServletRequest)和其他相关参数传递给处理器方法,确保方法能够正确地获取和处理请求信息。
    • 参数绑定HandlerAdapter还会协助进行参数绑定。它可以从请求中提取参数,并将其绑定到处理器方法的参数上。例如,如果处理器方法有一个参数@RequestParam("productId") String productIdHandlerAdapter会从请求中获取名为productId的参数,并将其值赋给productId这个变量。
  4. 处理器方法(Controller)执行处理

    • 业务逻辑调用:处理器方法(通常位于@Controller@RestController标注的类中)会执行具体的业务逻辑。这可能涉及调用其他服务层(Service)的方法来完成诸如数据查询、数据修改、业务规则验证等操作。例如,在一个处理产品查询的Controller方法中,会调用ProductService.getProducts()方法来获取产品列表。
    • 数据封装与返回:处理器方法会将处理后的结果进行封装。如果是返回视图相关的内容,会返回一个ModelAndView对象,其中Model部分包含要传递给视图的数据,View部分指定视图名称。如果是返回 JSON 等数据格式,会直接返回数据对象,SpringMVC 会根据配置自动将其转换为 JSON 格式。例如,返回一个List<Product>对象,SpringMVC 会使用消息转换器(Message Converter)将其转换为 JSON 格式并返回给客户端。
  5. 视图解析(如果适用)与响应返回

    • 视图解析(用于视图渲染):如果处理器方法返回的是ModelAndView对象,ViewResolver会根据View部分的信息来解析出实际的视图。例如,如果View部分是product - list.jspViewResolver会根据配置的视图前缀(如/WEB - INF/views/)和后缀(如.jsp)找到实际的 JSP 文件路径,用于后续的视图渲染。
    • 响应生成与返回:对于返回 JSON 等数据格式的情况,SpringMVC 会直接将转换后的内容作为响应体,设置合适的响应头(如Content - Type: application/json),并通过DispatcherServlet返回给客户端。对于视图渲染的情况,视图会将Model中的数据填充到模板中,生成最终的 HTML 响应,然后通过DispatcherServlet返回给客户端。

总结:

  1. 用户发送请求到前端控制器DispatcherServlet

  2. DispatcherServlet调用HandlerMapping找到具体处理器。

  3. HandlerMapping返回处理器对象及拦截器(如果有)给DispatcherServlet

  4. DispatcherServlet调用HandlerAdapter

  5. HandlerAdapter适配并调用具体处理器(Controller)。

  6. Controller执行并返回ModelAndView对象。

  7. HandlerAdapterModelAndView返回给DispatcherServlet

  8. DispatcherServlet传给ViewResolver进行视图解析。

  9. ViewResolver返回具体视图给DispatcherServlet

  10. DispatcherServlet渲染视图并响应用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值