Spring MVC 中 `DispatcherServlet` 处理请求的完整流程

Spring MVC 中 DispatcherServlet 处理请求的完整流程

DispatcherServlet 是 Spring MVC 的核心调度器,负责接收 HTTP 请求并协调其他组件完成请求处理。以下是其完整处理流程:


1. 请求到达 DispatcherServlet
  • 用户发起 HTTP 请求(如浏览器访问 URL)。
  • 请求首先由 Servlet 容器(如 Tomcat)接收,然后交给 DispatcherServlet 处理(因为 DispatcherServlet 是前端控制器,配置在 web.xml 或通过注解注册)。

2. 初始化阶段(首次请求时)
  • 加载配置
    DispatcherServlet 初始化时,会加载 Spring MVC 的配置(如 DispatcherServlet.properties 或自定义配置类),并初始化以下关键组件:
    • HandlerMapping:用于映射请求 URL 到处理器(Controller)。
    • HandlerAdapter:适配不同类型的处理器(如 @Controller 方法)。
    • ViewResolver:解析视图名称为具体视图对象(如 JSP、Thymeleaf 模板)。
    • 其他组件(如 HandlerExceptionResolverLocaleResolver 等)。

3. 请求处理阶段
(1) 获取 Handler(处理器)
  • DispatcherServlet 调用 HandlerMapping 根据请求 URL 查找对应的处理器(通常是 @Controller 类中的方法)。
  • 如果找不到处理器,抛出 404 错误。
(2) 选择 HandlerAdapter
  • 根据处理器类型(如 @Controller 方法、HttpRequestHandler 等),从 HandlerAdapter 列表中选择合适的适配器。
  • 适配器的作用是统一调用处理器的逻辑(隐藏不同处理器类型的差异)。
(3) 执行处理器(Controller 方法)
  • HandlerAdapter 调用目标处理器方法(如 @RequestMapping 注解的方法),并返回一个 ModelAndView 对象(包含模型数据和视图名称)。
  • 处理过程中可能涉及:
    • 参数绑定(如 @RequestParam@RequestBody)。
    • 数据校验(@Valid)。
    • 事务管理(@Transactional)。
(4) 处理异常(如果有)
  • 如果处理器抛出异常,DispatcherServlet 会调用 HandlerExceptionResolver 进行异常处理(如返回错误页面或 JSON 响应)。

4. 视图渲染阶段
(1) 解析视图
  • DispatcherServlet 调用 ViewResolver 根据 ModelAndView 中的视图名称解析出具体的视图对象(如 InternalResourceView 对应 JSP)。
(2) 渲染视图
  • 视图对象调用 render() 方法,将模型数据填充到视图模板中(如 JSP 渲染为 HTML)。
  • 最终生成 HTTP 响应内容(如 HTML 页面、JSON 数据等)。

5. 返回响应
  • DispatcherServlet 将渲染后的响应返回给 Servlet 容器。
  • Servlet 容器将响应发送回客户端(浏览器或其他 HTTP 客户端)。

完整流程图示

客户端Servlet容器DispatcherServletHandlerMappingHandlerAdapter处理器(Controller)ViewResolver视图(View)处理器视图发起HTTP请求转发请求查找处理器返回Handler选择适配器执行方法返回ModelAndView返回结果解析视图返回View对象渲染视图返回响应内容返回HTTP响应返回响应客户端Servlet容器DispatcherServletHandlerMappingHandlerAdapter处理器(Controller)ViewResolver视图(View)处理器视图

关键组件说明

组件作用
HandlerMapping将请求 URL 映射到处理器(如 RequestMappingHandlerMapping)。
HandlerAdapter适配不同类型的处理器(如 RequestMappingHandlerAdapter)。
ViewResolver将视图名称解析为具体视图对象(如 InternalResourceViewResolver)。
ModelAndView封装模型数据和视图名称,供视图渲染使用。
HandlerExceptionResolver处理处理器抛出的异常(如返回错误页面)。

总结

DispatcherServlet 的核心流程是:
接收请求 → 查找处理器 → 执行处理器 → 渲染视图 → 返回响应
其设计遵循 前端控制器模式,通过解耦请求处理、视图渲染等逻辑,实现灵活的 Web 开发。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值