资讯专栏INFORMATION COLUMN

Tomcat设计剖析(一)

amc / 1076人阅读

摘要:默认情况下,不同的组件会自己创建线程池来使用。目前支持两种,支持协议与协议的,组件的不同体现在其协议及模式的不同。组件维护会话的生成更新销毁。是中最小级别的容器。超过会阻塞等待,直到有可用对象为止。

Tomcat整体结构及组件如下图所示

Server
a.提供监听机制,用于在Tomcat整个生命周期中对不同事件进行处理。
b.提供Tomcat容器全局的命名资源实现
Tomcat的运行实例的抽象,包含若干个Listener组件、GlobalNamingResource组件及若干个Service组件。

Service
Service组件由若干个Connector组件和Executor组件组合而成。
Connector组件负责监听某端口的客户端请求,不同端口对应不同的Connector。
Executor组件在Service抽象层提供了线程池,让Service下的组件可以共用线程池。
默认情况下,不同的Connector组件会自己创建线程池来使用。其他组件也可以共享Service线程池。

Connector
Connector是Tomcat最核心的两个组件之一,主要负责接收客户端连接和客户端请求的处理加工。
每个Connector都指定一个端口进行监听,分别对请求报文解析和对响应报文组装,解析生成Request对象,组装生成Response对象,可以有多个Connector。
Protocol组件:是协议的抽象,将不同的协议进行了封装,如:HTTP协议和AJP协议。
EndPoint组件:是接收端的抽象,BIO模式有JioEndpoint,NIO模式有NioEndpoint和本地I/O模式的AprEndpoint。
Acceptor组件:用于接收客户端连接的接收器。
Executor组件:Connector自己的私有线程池。
Processor组件:处理客户端请求的处理器,不同的协议和不同的I/O模式有不同的处理方式。
Mapper组件:路由器,对客户端请求URL的映射,通过它可以将不同的请求转发到对应的Host组件、Context组件、Wrapper组件进行处理并响应给客户端。即将请求发送到某虚拟主机上的某个web应用的某个servlet。
CoyoteAdapter组件:适配器,将Connector组件和Engine容器适配连接起来。把接收到的客户端的请求报文解析成请求对象和响应对象传递到Engine容器,交由容器处理。
目前Tomcat支持两种Connector,支持HTTP协议与AJP协议的Connector,Connector组件的不同体现在其协议及I/O模式的不同。HTTP Connector所支持的协议版本为HTTP/1.1和HTTP/1.0。每个Connector实例对应一个端口,在同一个Service中可以设置若干个Connector实例,端口必须不同,协议可以相同。如Http11Protocol(BIO模式)、Http11NioProtocol(NIO模式)。

Engine
全局引擎容器,标准实现是StandardEngine。
Host组件:是Engine容器的子容器,表示一个虚拟主机,不同的域名被抽象成一个Host。
AccessLog组件:负责记录客户端请求访问日志,Engine容器是一个全局的Servlet容器,记录的日志为所有客户端的请求,无论访问哪个虚拟主机。
Pipeline组件:Pipeline属于一种设计模式,将不同级别的容器串联起来的通道,请求进来的时候就可以通过管道进行流转处理。
Cluster组件:有Engine和Host两个级别的集群
Realm组件:存储了用户、密码及权限等数据,主要是配合Tomcat实现资源认证模块

Host
表示虚拟主机,一个Engine可以包含若干个Host容器,一个Host容器可以包含若干个Context容器。

Context
Context容器包含若干个Wrapper组件、Realm组件、AccessLog组件、Manager组件等。
Manager组件:维护会话的生成、更新、销毁。每个Context都有自己的会话管理器。
Wrapper是Tomcat中最小级别的容器。其他组件不再赘述。

Wrapper
包含servlet和servlet对象池
servlet对象池是为了支持一个Servlet对象对应一个线程的SingleThreadModel接口而使用的策略,Wrapper会有一个Servlet堆,负责保存若干个Servlet对象,当需要Servlet对象时从堆中pop出一个对象,当用完之后push回堆中。Wrapper容器中最多可以有20个某servlet类对象。超过会阻塞等待,直到有可用对象为止。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68889.html

相关文章

  • 原理剖析(第 013 篇)应用系统性能调优

    摘要:指标虚拟内存已使用的大小,如果大于,表示你的机器物理内存不足了每秒从磁盘读入虚拟内存的大小,如果这个值大于,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。每秒虚拟内存写入磁盘的大小,如果这个值大于,同上,单位为。 原理剖析(第 013 篇)应用系统性能调优 - 一、大致介绍 1. 本人接手的一个打车系统,因为出现了一次响应十分缓慢的情况,因此才有了应用调优的篇章; 2、由于...

    roundstones 评论0 收藏0
  • Java学习必备书籍推荐终极版!

    摘要:实战高并发程序设计推荐豆瓣评分书的质量没的说,推荐大家好好看一下。推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 很早就想把JavaGuide的书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇...

    Steve_Wang_ 评论0 收藏0
  • 【备战春招/秋招系列】Java程序员必备书单

    摘要:相关推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。实战高并发程序设计推荐豆瓣评分,书的质量没的说,推荐大家好好看一下。 该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb... 【强烈推荐!非广告!】...

    saucxs 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<