
springboot中一个请求的处理流程
在Spring Boot中,一个HTTP请求的处理流程涉及多个组件协同工作,从请求进入到响应返回经历多个关键步骤。以下是详细的处理流程:
- 请求到达服务器
- 客户端(浏览器/APP等)发送HTTP请求到服务器(如Tomcat)
- 服务器监听指定端口(默认8080),接收请求
- 前端控制器(DispatcherServlet)拦截请求
- 请求首先被
DispatcherServlet
接收,它是Spring MVC的核心前端控制器 - 负责协调后续所有处理流程
- HandlerMapping查找处理器
DispatcherServlet
调用HandlerMapping
查找处理该请求的处理器(Handler)- 常见实现:
RequestMappingHandlerMapping
(处理@RequestMapping
注解) - 返回一个
HandlerExecutionChain
(包含处理器和拦截器)
- HandlerAdapter适配处理器
DispatcherServlet
根据处理器类型找到合适的HandlerAdapter
- 常见实现:
RequestMappingHandlerAdapter
(处理标注了@Controller
的Bean) - 负责调用具体的处理器方法
- 执行处理器方法
HandlerAdapter
调用实际的控制器方法(@Controller
中的@RequestMapping
方法)- 执行过程中会:
- 进行参数绑定(
@RequestParam
、@PathVariable
等) - 数据验证(
@Valid
、@Validated
) - 处理请求数据并执行业务逻辑
- 进行参数绑定(
- 返回ModelAndView
- 处理器方法执行完成后返回
ModelAndView
对象 - 包含视图名称和模型数据(可选)
- 视图解析(ViewResolver)
DispatcherServlet
调用ViewResolver
将逻辑视图名解析为物理视图- 常见实现:
InternalResourceViewResolver
(解析JSP视图)
- 渲染视图
- 视图对象将模型数据渲染到响应中
- 生成HTML、JSON等响应内容
- 执行拦截器的postHandle和afterCompletion
- 执行拦截器链中所有拦截器的
postHandle
方法(视图渲染前) - 执行拦截器链中所有拦截器的
afterCompletion
方法(视图渲染后)
- 返回响应
- 将渲染后的响应内容返回给客户端
- 完成一次请求-响应周期
额外说明:
- 对于RESTful API(返回JSON/XML),流程会简化,不需要视图解析和渲染步骤
- 异常处理由
HandlerExceptionResolver
处理,可通过@ExceptionHandler
自定义 - Spring Boot自动配置了大部分组件(如DispatcherServlet、Tomcat等),无需手动配置
这个流程体现了Spring MVC的"前端控制器模式"和"松耦合"设计理念,各组件职责明确,便于扩展和维护。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 surfingYu
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果