• 07 Tomcat 请求处理流程详解,Tomcat 请求流程设计架构


    Tomcat 请求处理流程详解

    在这里插入图片描述

    Tomcat 请求流程

    Tomcat 如何实现每个请求都能精准找到对应的Servlet呢?

    Mapper组件实现了将用户请求的URL定位到一个Servlet的功能。

    Mapper组件工作原理:

    Mapper组件里保存了Web应用的配置信息,其实就是容器组件与访问路径的映射关系,比如Host容器里配置的域名、Context容器里的Web应用路径,以及Wrapper容器里Servlet映射的路径,你可以想象这些配置信息就是一个多层次的Map。

    当一个请求到来时,Mapper组件通过解析请求URL里的域名和路径,再到自己保存的Map里去查找,就能定位到一个Servlet。请你注意,一个请求URL最后只会定位到一个Wrapper容器,也就是一个Servlet。


    Tomcat 请求流程设计架构

    在这里插入图片描述
    步骤:

    1. Connector组件Endpoint中的Acceptor监听客户端套接字连接并接收Socket。
    2. 将连接交给线程池Executor处理,开始执行请求响应任务。
    3. Processor组件读取消息报文,解析请求行、请求体、请求头,封装成Request对象。
    4. Mapper组件根据请求行的URL值和请求头的Host值匹配由哪个Host容器、Context容器、Wrapper容器处理请求。
    5. CoyoteAdaptor组件负责将Connector组件和Engine容器关联起来,把生成的Request对象和响应对象Response传递到Engine容器中,调用 Pipeline。
    6. Engine容器的管道开始处理,管道中包含若干个Valve、每个Valve负责部分处理逻辑。执行完Valve后会执行基础的 Valve–StandardEngineValve,负责调用Host容器的Pipeline。
    7. Host容器的管道开始处理,流程类似,最后执行 Context容器的Pipeline。
    8. Context容器的管道开始处理,流程类似,最后执行 Wrapper容器的Pipeline。
    9. Wrapper容器的管道开始处理,流程类似,最后执行 Wrapper容器对应的Servlet对象的处理方法。

    在这里插入图片描述Tomcat中的各个组件各司其职,组件之间松耦合,确保了整体架构的可伸缩性和可拓展性,那么在组件内部,如何增强组件的灵活性和拓展性呢? 在Tomcat中,每个Container组件采用责任链模式来完成具体的请求处理。

    在Tomcat中定义了Pipeline 和 Valve 两个接口,Pipeline 用于构建责任链, 后者代表责任链上的每个处理器。Pipeline 中维护了一个基础的Valve,它始终位于Pipeline的末端(最后执行),封装了具体的请求处理和输出响应的过程。当然,我们也可以调用addValve()方法, 为Pipeline 添加其他的Valve, 后添加的Valve 位于基础的Valve之前,并按照添加顺序执行。Pipiline通过获得首个Valve来启动整合链条的执行 。

    这个责任链,可以了结合前面《Tomcat 启动流程中的init》理解。

  • 相关阅读:
    JAVA‘无效目标发行版 17’的解决方案
    统信UOS Linux操作系统下怎么删除某个程序在开始菜单或桌面的快捷方式
    网页添加灰色滤镜
    LLMs在股票投资组合崩溃中的时间关系推理
    【毕业设计】基于单片机的自动浇花灌溉系统设计 -嵌入式 物联网 stm32 c51
    安装anaconda
    MATLAB中strjoin函数使用
    Java23种设计模式之【单例模式】
    【PyQt】调整子控件的层级以调整绘制的先后顺序
    vue面试题:说说vue操作真实dom性能瓶颈
  • 原文地址:https://blog.csdn.net/lingyiwin/article/details/125436895