background image

使用 Tomcat 处理 HTTP 请求:Connector 源码

  很多开源应用服务器都是集成 tomcat 作为 web container 的,而且对于 tomcat
的 servlet container 这部分代码很少改动。这样,这些应用服务器的性能基本上就取决
于 Tomcat 处理 HTTP 请求的 connector 模块的性能。本文首先从应用层次分析了
tomcat 所有的 connector 种类及用法,接着从架构上分析了 connector 模块在整个
tomcat 中 所 处 的 位 置 , 最 后 对 connector 做 了 详 细 的 源 代 码 分 析 。 并 且 我 们 以
Http11NioProtocol 为例详细说明了 tomcat 是如何通过实现 ProtocolHandler 接口而
构建 connector 的。如何实现 Connector
  相关阅读:Tomcat 处理 HTTP 请求:Connector 模块
  如何实现 Connector
  由上面的介绍我们可以知道,实现 Connector 就是实现 ProtocolHander 接口的过
程。
  AjpAprProtocol、AjpProtocol、Http11AprProtocol、Http11Protocol、JkCoyoteHa
ndler、MemoryProtocolHandler 这些实现类的实现流程与 Http11NioProtocol 相同,
下面我们以 Http11NioProtocol 为类重点说明 tomcat 中如何实现 ProtocolHander 接
口的。

Http11NioProtocol 实 现 了 ProtocolHander 接 口 , 它 将 所 有 的 操 作 委 托 给

NioEndpoint 类去做,如下图:

  
  NioEndpoint 类中的 init 方法中首先以普通阻塞方式启动了 SocketServer: