Spring MVC 请求处理的核心流程

**** Spring MVC 中 HandlerMapping 和 HandlerAdapter 的工作机制,特别关注了如何将请求映射到合适的控制器方法或处理器对象,以及它们如何被调用。以下是对话的主要内容总结:

Spring MVC 请求处理流程:

当请求到达 DispatcherServlet 时,Spring MVC 会依次调用配置的 HandlerMapping 实例,找到匹配的处理器(Handler)并封装成 HandlerExecutionChain。
然后通过 getHandlerAdapter 方法找到支持该 handler 的 HandlerAdapter,从而调用合适的处理器。

HandlerMapping 和 HandlerAdapter 的关系:

HandlerMapping 负责查找处理器,而 HandlerAdapter 则负责调用处理器的具体逻辑。
HandlerMapping 不直接与 HandlerAdapter 关联,而是通过 DispatcherServlet 的 getHandlerAdapter 方法动态确定合适的适配器。

RequestMappingHandlerMapping:

RequestMappingHandlerMapping 是 Spring MVC 中最常用的 HandlerMapping,它会扫描所有带有 @Controller 和 @RestController 注解的类,查找带 @RequestMapping、@GetMapping 等注解的方法。
这些方法会被封装为 HandlerMethod 对象,HandlerMethod 包含了控制器实例、方法对象、方法参数等信息,便于后续统一调用。
HandlerMethod vs HttpRequestHandler:

HandlerMethod 是 Spring MVC 的标准处理器类型,适用于基于注解的控制器方法,包括 @Controller 和 @RestController 注解的类。
HttpRequestHandler 是一个较低级的接口,适用于需要直接操作 HttpServletRequest 和 HttpServletResponse 的场景,例如文件下载、动态内容生成等。

SimpleUrlHandlerMapping 与 HttpRequestHandler 的使用:

SimpleUrlHandlerMapping 可以将 URL 路径映射到 HttpRequestHandler 类型的处理器,适合特殊用途的请求处理。
通过配置 SimpleUrlHandlerMapping,Spring MVC 可以将特定的 URL 路径映射到实现了 HttpRequestHandler 的处理器对象,并通过 HttpRequestHandlerAdapter 调用。

关键结论

注解驱动的控制器(@Controller 和 @RestController)的 handler 类型为 HandlerMethod,它由 RequestMappingHandlerMapping 创建和管理。
HandlerAdapter 是根据 supports 方法动态确定的,DispatcherServlet 会选择合适的 HandlerAdapter 适配器来调用对应的处理器类型。
HttpRequestHandler 是 Spring MVC 的一种特殊处理器类型,不适用于常规的控制器类,而是用于特殊的 HTTP 请求处理场景

posted @ 2024-10-30 09:49  芬尼拔  阅读(6)  评论(0编辑  收藏  举报