tomcat整体架构(一)

参照《tomcat架构解析》,梳理下tomcat整体结构,其中部分图片来自于这本书。tomcat涉及很多组件,逐步拆解来看
![image.png](https://img-blog.csdnimg.cn/img_convert/700ab7deb03e372a0937bf72edd1623b.png

Server

从最顶层设计上,tomcat抽象出Server跟Service两个概念。Server是对整个tomcat服务器的抽象,一个tomcat里只会有一个server实例;Service是对一个web服务的抽象,一个Server里可以有多个Web服务,因此Server跟Service是一对多的关系

Service

Service是对一个web服务的抽象。试想一下,如果让我们从tcp开始构造一个web服务,需要处理哪些事情?主要有

  • 监听网络端口,将网络读取到的数据解析成对象
  • 封装请求处理的通用逻辑,将特殊逻辑抽象出来交给用户实现
  • 请求映射,根据url或者其他内容,将一个请求交给用户实现的处理器来处理
  • 线程模型。用户可能会实现很多的请求处理器,从逻辑上一部分处理器要跟另一部分处理器在线程上隔离

Service从大的方面,也是这么抽象的。一个Service会持有几个子组件

  • 一组Connector:Connector处理底层网络工作。1是负责监听网络端口,将网络读取到的数据解析成Request;2是将Engine处理完的Response通过网络传输给客户端
  • 一个Engine:是对web服务处理逻辑的抽象,Engine内部会包含多个Servlet用于处理请求。Engine接收Request,将响应结果写入Response,由Connector序列化给客户端
  • 一个Mapper跟一个MapperListener:Connector解析出来的请求交给哪个Servlet来处理呢?Mapper负责保存请求到Servlet的映射关系,MapperListener负责维护这种映射关系(当Selvet新增删除时)
  • 一个Executor:线程池用于处理请求

Connector

Connector是负责网络相关的工作,具体就是监听网络端口将网络读取到的数据解析成Request,将Engine处理完的Response通过网络传输给客户端。涉及到的组件有ProtocolHandler、AbstractEndpoint、Processor
Connector本身并不处理网络工作,而是维护ProtocolHandler、Adaptor以及一些配置,具体这些工作是交给ProtocolHandler来处理。Connector本身会

  • 根据配置创建ProtocolHandler
  • 创建Adaptor。Connector本身也不需要Adaptor,会将创建的Adaptor传给ProtocolHandler

ProtocolHandler具体来处理网络工作,ProtocolHandler将网络工作分成两块
1、网络数据交互。也就是监听网络端口,以及将响应写给客户端。具体由AbstractEndpoint处理
2、数据解析及分发。AbstractEndpoint收到数据后,会由Processor来解析成Request并创建Response。将请求交给CoyoteAdaptor,由CoyoteAdaptor找到serlet容器并调用

CoyoteAdaptor

CoyoteAdaptor负责将请求映射到Servlet并调用到Servlet,映射关系由Mapper维护。CoyoteAdaptor通过Mapper映射到Servlet,然后调用Engine的pipeline。根据pipeline机制,请求会按顺序调用每个pipeline最终调用到Servlet

Mapper

Mapper维护了请求到Servlet的映射关系,MapperListener监听容器事件来更新Mapper

Engine

Engine是Servlet顶层的容器,一个Service维护一个Engine,下面还有Host、Context、Wrapper等容器。

  • Host:是对虚拟主机概念的抽象。为什么需要单独抽象出来Host?假如有两个子域名,承接不同服务。正常来讲应该部署为两套系统,但在规模比较小的情况下也可以部署在一台服务器上,通过Host虚拟出来两个主机
  • Context:是对应用的抽象,一个Host下可以包含多个应用。应用拥有一套代码,可以通过war、jar包部署。在tomcat里体现就是webapps下面的一个应用
  • Wrapper:是对Servlet的抽象,一个Context可以包含多个Wrapper

你可能感兴趣的:(tomcat,架构,servlet)