简介
Coyote 是Tomcat 中连接器的组件名称 , 是对外的接⼝。客户端通过Coyote与服务器建⽴连接、发送请
求并接受响应 。
- Coyote 封装了底层的⽹络通信(Socket 请求及响应处理)
- Coyote 使Catalina 容器(容器组件)与具体的请求协议及IO操作⽅式完全解耦
- Coyote 将Socket 输⼊转换封装为 Request 对象,进⼀步封装后交由Catalina 容器进⾏处理,处
理请求完成后, Catalina 通过Coyote 提供的Response 对象将结果写⼊输出流 - Coyote 负责的是具体协议(应⽤层)和IO(传输层)相关内容
Tomcat Coyote ⽀持的 IO模型与协议
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,再调⽤容器