• Tomcat(一) 系统架构


    一、Tomcat系统架构-连接器

    tomcat设计了两个核心组件:连接器Connector, 容器Container;连接负责对外交流,容器负责内部处理;

    连接器的基本功能:
    1、监听网络端口
    2、接收网络请求连接
    3、将请求解析转换为 Tomcat Request 对象
    4、将Tomcat Request 转换为 Servlet Request
    **5、调用Servlet 获得 Servlet Response **
    6、将获得的结果转换,响应返回给前端

    根据上述功能,Tomcat 就把它抽象成了三个核心类,EndPoint 、Process、Adapter 来分别处理

    • 网络通信
    • 应用层协议解析
    • Tomcat Request 到 Servlet的转换

    组件之间通过接口进行交互,封装变化,将系统中经常变化的部分,和稳定的部分进行隔离;有助于增加复用性,并降低系统的耦合度;
    其交互处理的逻辑如下:
    ![image.png](https://img-blog.csdnimg.cn/img_convert/78c875720ab2d42095a9b346a42683de.png#clientId=u604cc54a-cf5a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=266&id=u10206821&margin=[object Object]&name=image.png&originHeight=532&originWidth=1450&originalType=binary&ratio=1&rotation=0&showTitle=false&size=208315&status=done&style=none&taskId=uab577043-6cae-4a92-9ed6-fa2cfa67b4a&title=&width=725)
    1.1 ProtocolHandler 组件
    这个组件内部包含两个组件,E和 Processor;
    **EndPoint: **负责通信的端点,是具体的Socket接收和发送的处理器,该组件是实现Tcp/Ip 协议的(内部有个线程池处理请求)
    **Processor:**用来实现 HTTP 协议,Processor 接收来自 EndPoint 的 Socket,读取字节流解析成 Tomcat Request 和Response 对象,并通过 Adapter 将其提交到容器处理,Processor 是对应用层协议的抽象。

    EndPoint 负责底层 Socket通信,Proccesor 负责应用层协议解析。连接器通过适配器 Adapter 转换调用容器。

    二、Tomcat系统架构-容器

    容器的层次结构,Tomcat设计了4种容器,分别是Engin 、Host、Context 、Wapper

    他们是一个包含关系。Tomcat 通过一种分层的架构,使得 Servlet 容器具有很好的灵活性。

    • Context 表示一个 Web 应用程序;
    • Wrapper 表示一个 Servlet,一个 Web 应用程序中可能会有多个 Servlet;
    • Host 代表的是一个虚拟主机,或者说一个站点,可以给 Tomcat 配置多个虚拟主机地址,而一个虚拟主机下可以部署多个 Web 应用程序;
    • Engine 表示引擎,用来管理多个虚拟站点,一个 Service 最多只能有一个 Engine。


    上图展示了,根据Url是如何找到对应的wapper进行处理;

    连接器中Adapter 会调用容器的 Service 方法来执行 Servlet,最先拿到请求的是 Engine 容器,Engine 容器对请求做一些处理后,会把请求传给自己子容器 Host 继续处理,依次类推,最后这个请求会传给 Wrapper 容器,Wrapper 会调用最终的 Servlet 来处理。那么这个调用过程具体是怎么实现的呢?
    答案是使用 Pipeline-Valve 管道。

    • Pipeline-Valve 是责任链模式,责任链模式是指在一个请求处理的过程中有很多处理者依次对请求进行处理,每个处理者负责做自己相应的处理,处理完之后将再调用下一个处理者继续处理。


    在连接器里 会有一个触发调用 Engine的一个 value,然后以责任链的模式不断传递,Wrapper 容器的最后一个 Valve 会创建一个 Filter 链,并调用 doFilter() 方法,最终会调到 Servlet 的 service 方法

    参考

    极客时间-深入理解Tomcat

  • 相关阅读:
    TensorFlow搭建LSTM实现多变量多步长时间序列预测(五):seq2seq
    Nginx之配置文件及基础概念解读
    【学习方法】手机越戒越上瘾?三招让你戒掉手机玩命学习!
    毕业设计-基于机器视觉的颜色目标识别
    帝国竞争算法(ICA)(Matlab代码实现)
    串口通信
    bm20 2
    【校招VIP】java专业课之分页、分段
    ORACLE克隆用户权限:DBMS_METADATA.GET_GRANTED_DDL
    PingCode 完成近亿元人民币C轮融资,打造世界级研发管理与协作平台
  • 原文地址:https://blog.csdn.net/weixin_43732955/article/details/124901299