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容器 DispatcherServlet HandlerMapping HandlerAdapter 处理器(Controller) ViewResolver 视图(View) 处理器 视图 发起HTTP请求 转发请求 查找处理器 返回Handler 选择适配器 执行方法 返回ModelAndView 返回结果 解析视图 返回View对象 渲染视图 返回响应内容 返回HTTP响应 返回响应 客户端 Servlet容器 DispatcherServlet HandlerMapping HandlerAdapter 处理器(Controller) ViewResolver 视图(View) 处理器 视图

关键组件说明

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

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值