Tomcat 连接器组件-Coyote简介

简介

Coyote 是Tomcat 中连接器的组件名称 , 是对外的接⼝。客户端通过Coyote与服务器建⽴连接、发送请
求并接受响应 。

  1. Coyote 封装了底层的⽹络通信(Socket 请求及响应处理)
  2. Coyote 使Catalina 容器(容器组件)与具体的请求协议及IO操作⽅式完全解耦
  3. Coyote 将Socket 输⼊转换封装为 Request 对象,进⼀步封装后交由Catalina 容器进⾏处理,处
    理请求完成后, Catalina 通过Coyote 提供的Response 对象将结果写⼊输出流
  4. Coyote 负责的是具体协议(应⽤层)和IO(传输层)相关内容

Tomcat 连接器组件-Coyote简介

Tomcat Coyote ⽀持的 IO模型与协议

Tomcat 连接器组件-Coyote简介

Coyote 的内部组件及流程

Tomcat 连接器组件-Coyote简介

  • EndPoint EndPoint 是 Coyote 通信端点,即通信监听的接⼝,是具体Socket接收和发
    送处理器,是对传输层的抽象,因此EndPoint⽤来实现TCP/IP协议的
  • Processor Processor 是Coyote 协议处理接⼝ ,如果说EndPoint是⽤来实现TCP/IP协
    议的,那么Processor⽤来实现HTTP协议, Processor接收来⾃EndPoint的
    Socket,读取字节流解析成Tomcat Request和Response对象,并通过
    Adapter将其提交到容器处理, Processor是对应⽤层协议的抽象
  • ProtocolHandler Coyote 协议接⼝, 通过Endpoint 和 Processor , 实现针对具体协议的处
    理能⼒。 Tomcat 按照协议和I/O 提供了6个实现类 : AjpNioProtocol ,
    AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol ,
    Http11Nio2Protocol , Http11AprProtocol
  • Adapter 由于协议不同,客户端发过来的请求信息也不尽相同, Tomcat定义了⾃⼰的
    Request类来封装这些请求信息。 ProtocolHandler接⼝负责解析请求并⽣成
    Tomcat Request类。但是这个Request对象不是标准的ServletRequest,不
    能⽤Tomcat Request作为参数来调⽤容器。 Tomcat设计者的解决⽅案是引
    ⼊CoyoteAdapter,这是适配器模式的经典运⽤,连接器调⽤
    CoyoteAdapter的Sevice⽅法,传⼊的是Tomcat Request对象,
    CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调⽤容器