美文网首页
Tomcat系统架构(上)

Tomcat系统架构(上)

作者: 胡飞飞_1995 | 来源:发表于2019-06-01 10:54 被阅读0次

整体架构图

Tomcat整体架构图.jpg

Connector(连接器)

功能需求:

  1. 监听网络端口
  2. 接受网络连接请求
  3. 读取请求网络字节流
  4. 根据具体应用层协议(HTTP/AJP)解析字节流,生成统一的Tomcat Request对象
  5. 将Tomcat Request对象转成标准的ServletRequest
  6. 调用Servlet容器,得到ServletResponse
  7. 将ServletResponse转成 Tomcat Response对象
  8. 将Tomcat Response对象转成网络字节流
  9. 将响应字节流写会服务器

分析

连接器需要完成三个高内聚的工作

  1. 网络通信--Endpoint
  2. 应用层协议解析--Processor
  3. Tomcat Request/Response 与 Servlet Request/Response 的转化--Adapter

处理逻辑

Endpoint负责提供字节流给Processor,Processor负责提供Tomcat Request 对象给Adapter,Adapter 负责提供ServletResponse对象给容器

由于I/O模型和应用层协议可以自由组合,所以设计了一个ProtocolHandler的接口来封装这两种变化点,

由于还存在一些稳定的部分,Tomcat设计了一系列抽象类来封装。它们的继承关系如下图所示:

ProtocolHandler类图.jpg

ProtocolHandler组件

连接器用ProtocolHandler来处理网络连接和应用层协议,包含两个重要组件:Endpoint 和 Processor。

Endpoint

Endpoint是通信端点,即通信监听的接口,是具体的Socket接受和发送处理器,是对传输层的抽象,因此endpoint是用来实现TCP/IP协议的。
Endpoint是一个接口,对应的抽象实现类是AbstractEndpoint(org.apache.tomcat.util.net.AbstractEndpoint),而AbstractEndpoint的具体子类,比如在NioEndpoint和Nio2Endpoint中,有两个重要的子组件:Acceptor(一个实现了Runable接口的抽象类,在NioEndpoint等类中有具体实现) 和 SocketProcessor。

其中Acceptor用于监听Socket连接请求。SocketProcessor用于处理接收到的Socket请求,他事先Runnable接口,在Run方法里调用协议处理组件Processor进行处理。为了提高处理能力,SocketProcessor 被提交到线程池来执行。这个线程池叫执行器(Executor),扩展了原生的Java线程池。

Processor

如果说 Endpoint 是用来实现 TCP/IP 协议的,那么 Processor 就是用来实现HTTP协议,Processor 接受来自Endpoint的Socket,读取字节流解析成 Tomcat Request 和 Response 对象,并通过 Adapter 将其提交到容器处理,Processor 是对应用层协议的抽象。

Processor 是一个接口,定义了请求的处理等方法。它的抽象实现类 org.apache.coyote.AbstractProcessor 对一些协议共有的属性进行封装,没有对方法进行实现。具体的实现协议有 AJPProcessor 、HTTP!!Processor 等,这些具体实现类实现了特定协议的解析方法和请求处理方式。

连接器示意图.jpg

从图中我们看到,Endpoint 接收到 Socket 连接后,生成一个SocketProcessor 任务提交到线程池去处理,SocketProcessor 的 Run 方法会调用 Processor 组件去解析应用层协议,Processor 通过解析生成 Request 对象后,会调用 Adapter 的 Service 方法。

Adapter组件

由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat定义了自己的Request(org.apache.coyote.Request)类来“存放”这些请求信息。ProtocolHandler 接口负责解析请求并生成 Tomcat Request 类。但是这个Request对象并不是标准的ServletRequest,也就意味着,不能用 Tomcat Request 作为参数来调用容器。 Tomcat设计者的解决方案是引入 CoyoteAdapter(org.apache.catalina.connector.CoyoteAdapter),这是适配器模式的经典运用,连接器调用CoyoteAdapter的Service方法,传入的是 Tomcat Request 对象,CoyoteAdapter 负责将 Tomcat Request 对象转成 ServletRequest,再调用容器的 Service 方法。

相关文章

  • Tomcat系统架构(上)

    整体架构图 Connector(连接器) 功能需求: 监听网络端口 接受网络连接请求 读取请求网络字节流 根据具体...

  • 一万字深度剖析Tomcat源码

    整篇文章分为两大部分,Tomcat 系统架构设计和 Tomcat 源码剖析。 Tomcat系统架构设计 1.前言 ...

  • 【学习】重点框架

    Tomcat Tomcat全面介绍Tomcat支持的协议Tomcat系统架构Tomcat容器责任链实现Tomcat...

  • Tomcat系统架构

    来源:公众号 Java后端技术 一、Tomcat顶层架构 先上一张Tomcat的顶层结构图(图A),如下: Tom...

  • Tomcat系统架构

    一、Tomcat顶层架构 先上一张Tomcat的顶层结构图(图A),如下: omcat中最顶层的容器是Server...

  • Tomcat系统架构

    两张图足以说明 顶层架构 1个server服务器下面可以有多个service 1个service下面可以有多个co...

  • Tomcat系统架构

    每一个tomcat都只有一个Server,表示整个服务环境。一个Server中可以有多个Service。Serve...

  • Tomcat详解

    Tomcat系统架构如下图: Tomcat有两个核心组件:Connector和Container,Connecto...

  • Tomcat中的网络通信

    Tomcat的整体架构 整体架构的层次结构与tomcat的server.xml文件的层级结构相同。 操作系统级别网...

  • Tomcat server.xml配置异常总结

    Tomcat架构 参考Tomcat架构和配置 Service 如果不配置Service,Tomcat可以正常启动,...

网友评论

      本文标题:Tomcat系统架构(上)

      本文链接:https://www.haomeiwen.com/subject/qspotctx.html