FantasticMao 技术笔记
BlogGitHub
  • README
  • C & Unix
    • C
      • 《C 程序设计语言》笔记
      • C 语言中的陷阱
      • CMake 示例
      • GNU make
      • LLVM Clang
      • Nginx 常用模块
      • Vim 常用命令
    • Unix-like
      • 《深入理解计算机系统》笔记
      • 《UNIX 环境高级编程》笔记 - UNIX 基础知识
      • 《UNIX 环境高级编程》笔记 - 文件 IO
      • 《UNIX 环境高级编程》笔记 - 标准 IO 库
      • 《鳥哥的 Linux 私房菜》笔记 - 目录配置
      • 《鳥哥的 Linux 私房菜》笔记 - 认识与学习 bash
      • 《鳥哥的 Linux 私房菜》笔记 - 任务管理
      • OpenWrt 中的陷阱
      • iptables 工作机制
  • Go
    • 《A Tour of Go》笔记
    • Go vs C vsJava
    • Go 常用命令
    • Go 语言中的陷阱
  • Java
    • JDK
      • 《Java 并发编程实战》笔记 - 线程池的使用
      • 设计模式概览
      • 集合概览
      • HashMap 内部算法
      • ThreadLocal 工作机制
      • Java Agent
    • JVM
      • 《深入理解 Java 虚拟机》笔记 - Java 内存模型与线程
      • JVM 运行时数据区
      • 类加载机制
      • 垃圾回收算法
      • 引用类型
      • 垃圾收集算法
      • 垃圾收集器
    • Spring
      • Spring IoC 容器扩展点
      • Spring Transaction 声明式事务管理
      • Spring Web MVC DispatcherServlet 工作机制
      • Spring Security Servlet 实现原理
    • 其它
      • 《Netty - One Framework to rule them all》演讲笔记
      • Hystrix 设计与实现
  • JavaScript
    • 《写给大家看的设计书》笔记 - 设计原则
    • 《JavaScript 权威指南》笔记 - jQuery 类库
  • 数据库
    • ElasticSearch
      • ElasticSearch 概览
    • HBase
      • HBase 数据模型
    • Prometheus
      • Prometheus 概览
      • Prometheus 数据模型和指标类型
      • Prometheus 查询语法
      • Prometheus 存储原理
      • Prometheus vs InfluxDB
    • Redis
      • 《Redis 设计与实现》笔记 - 简单动态字符串
      • 《Redis 设计与实现》笔记 - 链表
      • 《Redis 设计与实现》笔记 - 字典
      • 《Redis 设计与实现》笔记 - 跳跃表
      • 《Redis 设计与实现》笔记 - 整数集合
      • 《Redis 设计与实现》笔记 - 压缩列表
      • 《Redis 设计与实现》笔记 - 对象
      • Redis 内存回收策略
      • Redis 实现分布式锁
      • Redis 持久化机制
      • Redis 数据分片方案
      • 使用缓存的常见问题
    • MySQL
      • 《高性能 MySQL》笔记 - Schema 与数据类型优化
      • 《高性能 MySQL》笔记 - 创建高性能的索引
      • 《MySQL Reference Manual》笔记 - InnoDB 和 ACID 模型
      • 《MySQL Reference Manual》笔记 - InnoDB 多版本
      • 《MySQL Reference Manual》笔记 - InnoDB 锁
      • 《MySQL Reference Manual》笔记 - InnoDB 事务模型
      • B-Tree 简述
      • 理解查询执行计划
  • 中间件
    • gRPC
      • gRPC 负载均衡
    • ZooKeeper
      • ZooKeeper 数据模型
    • 消息队列
      • 消息积压解决策略
      • RocketMQ 架构设计
      • RocketMQ 功能特性
      • RocketMQ 消息存储
  • 分布式系统
    • 《凤凰架构》笔记
    • 系统设计思路
    • 系统优化思路
    • 分布式事务协议:二阶段提交和三阶段提交
    • 分布式系统的技术栈
    • 分布式系统的弹性设计
    • 单点登录解决方案
    • 容错,高可用和灾备
  • 数据结构和算法
    • 一致性哈希
    • 布隆过滤器
    • 散列表
  • 网络协议
    • 诊断工具
    • TCP 协议
      • TCP 报文结构
      • TCP 连接管理
由 GitBook 提供支持
在本页
  • 特殊 Bean
  • 工作流程
  • 参考资料
  1. Java
  2. Spring

Spring Web MVC DispatcherServlet 工作机制

Spring MVC 是围绕着一个名为 DispatcherServlet 的核心 Servlet 来设计的,DispatcherServlet 提供了一个用于处理请求的公共算法,并且会把这些实际工作委托给 Spring 容器当中的 Bean,同时这些 Bean 都是可配置化。Spring MVC 的这种工作模式非常灵活,因此它支持多种不同的工作流程。

特殊 Bean

DispatcherServlet 会感知到 Spring 容器中以下类型的特殊 Bean:

Bean 类型
说明

HandlerMapping

将 request 映射到 handler,同时会对关联一系列的用于 request 前置和后置处理的 interceptor。HandlerMapping 中的映射是基于某些条件的,不同的 HandlerMapping 实现类的实现细节是不一样的。 两个主要 HandlerMapping 实现类是 RequestMappingHandlerMapping 和 SimpleUrlHandlerMapping。前者支持将 request 映射到使用 @RequestMapping 注解的方法,后者支持显式注册 URI 路径,并会维护它与 handler 的映射关系。

HandlerAdapter

帮助 Dispatcher 调用 request 所映射的 handler,会屏蔽 handler 具体的调用方式。例如调用 @RequestMapping 注解的方法时需要解析注解,HandlerAdapter 的作用就是使 Dispatcher 对这些细节无感知。

HandlerExceptionResolver

解析 exception 的策略,可能会将 exception 解析到 @ExceptionHandler 注解的方法,或者是 HTML 错误页面。

ViewResolver

将从 handler 返回的 String 类型的逻辑视图解析为真实的视图,解析后的视图会被作为 response。

LocaleResolver、LocaleContextResolver

解析客户端所使用的 Locale 和时区,为了能够提供一个国际化的视图。

ThemeResolver

解析 web 应用可以使用的主题。

MultipartResolver

解析 multi-par request,例如在浏览器中上传文件。

FlashMapManager

存储和检索「输入」与「输出」的 FlashMap,该 FlashMap 可用于将一个 request 中的属性传递到另一个 request 中。

工作流程

                                                           +---------------------+
                                                           | HandlerMapping      |
                                        request            | +------------------+|
                                   +<--------------------->| |HandlerInterceptor||
                                   | handler, interceptors | +------------------+|
  request  +-------------------+   |                       +---------------------+
<--------->| DispatcherServlet |---+
 response  +-------------------+   |   request, handler    +----------------+
                                   +<--------------------->| HandlerAdapter |
                                   |                 view  +----------------+
                                   |
                                   |   view                +----------------+
                                   +<--------------------->| ViewResolver   |
                                                 response  +----------------+
                                                                |      ^
                                                                v      |
                                                           +----------------+
                                                           | LocaleResolver |
                                                           +----------------+
                                                                |      ^
                                                                v      |
                                                           +----------------+
                                                           | ThemeResolver  |
                                                           +----------------+

参考资料

最后更新于1年前

Spring Web MVC - DispatcherServlet