You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring如何匹配HTTP请求与对应端点?抽象层及核心组件作用解析

Spring HTTP 请求映射与核心组件工作原理

核心角色先搞清楚

核心路由逻辑是DispatcherServlet在主导,Servlet Filters是前置处理的辅助环节,二者分工明确,不是二选一的关系。

请求从进来到返回的完整流程

  • 请求先进入Servlet容器(比如Tomcat)的Filter链:这一步做通用前置处理,比如统一设置请求编码、校验跨域、打访问日志,Filter只能拦截请求做通用处理,管不了具体要调用哪个业务端点。
  • 容器把请求转交给DispatcherServlet:它是Spring MVC的「前端控制器」,所有要进入Spring处理的请求都得经过它。
  • DispatcherServlet找Handler Mapping(处理器映射器):它会拿着请求的URL、HTTP方法(GET/POST等)去匹配预先注册好的业务方法——也就是你写的@Controller或@RestController里的端点方法。
  • 找到匹配的方法后,DispatcherServlet调用Handler Adapter(处理器适配器):适配器负责调用具体的业务方法,帮你处理参数绑定、返回值解析这些细节。
  • 业务方法执行完返回结果,DispatcherServlet再调用视图解析器(如果是页面渲染的话),或者直接把JSON/XML响应返回。
  • 最后响应再经过Filter链,回到客户端。

请求映射的抽象层是怎么工作的

Spring的请求映射核心是Handler Mapping这个抽象层,它有多种实现:

  • 最常用的是RequestMappingHandlerMapping:启动时会扫描所有带@Controller/@RestController的类,解析方法上的@RequestMapping(包括@GetMapping、@PostMapping这些派生注解),把URL、请求方法、请求参数等规则和对应的业务方法绑定,存在内部的映射注册表中。请求过来时直接查注册表找匹配项,不用每次都扫描类。
  • 还有一些底层实现比如SimpleUrlHandlerMapping(手动配置URL到Handler的映射)、BeanNameUrlHandlerMapping(用Bean名称当URL),现在项目里基本很少用了。

Servlet Filters 和 DispatcherServlet 的区别

  • Servlet Filters:属于Servlet容器的组件,和Spring无关,作用是对请求/响应做通用的预处理/后处理,比如过滤非法请求、添加响应头、做权限校验的前置拦截。它不知道Spring的端点映射规则,只能拦请求,没法直接找到对应的业务方法。
  • DispatcherServlet:是Spring MVC的核心,专门管请求路由到具体业务端点的逻辑,它通过Handler Mapping找到匹配的方法,协调各个组件完成整个请求处理流程。

举个实际例子:你写了@GetMapping("/user/{id}")的方法,启动时RequestMappingHandlerMapping会把这个URL和方法绑定好。当请求进来,先经过CharacterEncodingFilter处理编码,然后到DispatcherServlet,它查注册表找到对应的方法,调用适配器执行,最后返回用户数据。

内容的提问来源于stack exchange,提问作者Nikhil Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:57:49