来源

本文整理自 <Tomcat内核设计剖析>、<Tomcat结构解析>

Tomcat 整体架构

​ 如上图所示:包含了Tomcat内部的主要组件,每个组件之间的层次包含关系很清楚。Tomcat大体上可以看成由 Connector 和 Container 组件组成。Connector组件负责在服务器端处理客户端连接(客户端连接、接收客户端消息报文、消息报文的解析等),Container负责对客户端的请求进行逻辑处理,并把结果返回给客户端。

对应的server.xml中节点

<Server>
<Listener/>
<GlobalNamingResources>
<Resource/>
</GlobalNamingResources>
<Service>
<Executor/>
<Connector/>
<Engine>
<Cluster/>
<Realm/>
<Host>
<Context/>
</Host>
</Engine>
</Service>
</Server>

Tomcat内部组件

Server组件

​ Server是最顶级的组件,代表Tomcat的运行实例,一个JVM中只会有一个Server。

  • Listener组件:在Tomcat生命周期中完成不同的工作。
  • GlobalNamingResources组件:集成JNDI

Service组件

​ 是服务的抽象,代表请求从接收到处理的所有的组件的集合。每个Service包含若干个用于接收客户端的Connector组件和处理请求的Engine组件。还包含了若干个Executor组件,每个都是一个线程池。

Connector组件

​ Connector 主要负责接收客户端连接并接收请求报文、解析报文转交给 Container容器去处理。为了实现不同的通信协议,所以有多个 Connector组件,每种协议对应一个Connector组件,目前有 Http协议、AJP协议两种Connector组件。

​ 在阻塞I/O方式下:Connector的结构如图:

​ 在非阻塞I/O方式下:Connector的结构如图:

  • Protocol组件:是协议的抽象,包含接收客户端连接、接收客户端消息报文、报文解析处理、对客户端的响应等过程,主要包含:

    • Endpoint:内部的 Acceptor 会对端口进行监听,有请求会丢到 Executor,然后转交给 Processor组件。
    • Processor: Processor组件对协议进行解析并传递到 Engine容器进行处理。
  • Mapper组件:对请求地址进行路由。

  • CoyoteAdaptor组件:一个将Connector 和 Container 联系起来的适配器。

在 BIO和NIO下,使用的组件有所不同,并且NIO多了一个 Poller组件(轮询多个客户端连接,不断检测,处理各种事件。)

Engine组件

​ Engine 代表全局Servlet引擎,每一个 Service 只能包含一个 Engine容器组件,但是Engine组件 可以包含很多个Host容器组件,还包含如下组件:

  • Listener组件:在Tomcat生命周期中完成某些Engine容器相关工作。
  • AccessLog组件:客户端的访问日志,所有客户端访问都会被记录。
  • Cluster组件:提供集群功能,可将Engine容器需要共享的数据同步到集群中的其他Tomcat实例上。
  • Pipeline组件:Engine容器对请求进行处理的管道
  • Realm组件:提供Engine容器级别的用户--密码--权限的数据对象,配合资源认证模块使用。

Host组件

​ Host组件代表虚拟主机,这些虚拟主机可以存放若干Web应用的抽象(Context容器),还有以下组件:

  • Listener组件:在Tomcat生命周期中完成某些Host容器相关工作。
  • AccessLog组件:客户端的访问日志,对该虚拟主机上所有WEB应用的访问都会被记录。
  • Cluster组件:提供集群功能,可将Host容器需要共享的数据同步到集群中的其他Tomcat实例上。
  • Pipeline组件:Host容器对请求进行处理的管道
  • Realm组件:提供Host容器级别的用户--密码--权限的数据对象,配合资源认证模块使用。

Context组件

​ Context组件是WEB应用的抽象,WEB应用部署到Tomcat后运行会转成Context对象。

  • Listener组件:在Tomcat生命周期中完成某些Context容器相关工作。
  • AccessLog组件:客户端的访问日志,对该WEB应用的访问都会被记录。
  • Pipeline组件:Context容器对请求进行处理的管道
  • Realm组件:提供Context容器级别的用户--密码--权限的数据对象,配合资源认证模块使用。
  • Loader组件:WEB应用加载器,用于加载WEB应用的资源,要保证不同WEB应用之间的资源隔离。
  • Manager组件:会话管理器,用于管理对应WEB容器的会话,包括维护会话的生成、更新、销毁。
  • NamingResource组件:命名资源,负责将Tomcat配置文件的Server.xml和Web应用的context.xml资源和属性映射到内存中。
  • Mapper组件:Servlet映射器,属于Context内部的路由映射器,只负责该Context容器的路由。
  • Wrapper组件:Context的子容器。

Wrapper组件

​ 一个Wrapper对应一个 Servlet,包含以下组件:

  • Servlet组件:
  • ServletPool组件:当WEB应用实现了 SingleThreadModel 接口时,会在Wrapper中产生一个Servlet对象池。线程执行,先从对象池中获取一个Servlet对象,能保证线程安全。
  • Pipeline组件:Wrapper容器对请求进行处理的管道。

Tomcat整体介绍的更多相关文章

  1. Java 并发编程整体介绍 | 内含超多干货

    前段时间一直在学习多线程相关的知识,目前也算有了一个整体的认识,今天呢,主要从整体介绍一下,只谈造火箭,拧螺丝这种细节还需要自己深究. 首先是操作系统级别对于多线程的支持,由 CPU 的多级缓存.缓存 ...

  2. SNF快速开发平台--规则引擎整体介绍及使用说明书

    一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...

  3. PyQt5整体介绍

    1 PyQt5整体介绍 PyQt5是基于图形程序框架Qt5的Python语言实现,由一组Python模块构成. PyQt5的官方网站是:www.riverbankcomputing.co.uk. Py ...

  4. tomcat组成介绍和调优方案

    1.tomcat组成介绍 1.1 目录组成介绍 1.2 启动tomcat中遇到的问题 a.启动过程中出现很多异常:因为端口被占用了 解决方式1:修改Tomcat\conf\server.xml中的默认 ...

  5. Tomcat 服务器介绍

    Tomcat 目录介绍 Tomcat 主目录有 bin, conf, lib, logs, temp, webapps, work 7个文件夹 bin 目录 主要用来存放 tomcat 命令 .sh ...

  6. [置顶] API相关工作过往的总结之整体介绍

    此系列的总结文章,仅仅是我个人工作总结,有考虑不周之处还请各位同行多多指教. API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是 ...

  7. Tomcat【介绍Tomcat、结构目录、虚拟目录、临时域名、虚拟主机、体系结构】

    什么是Tomcat Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 为什么我们需要用到Tomcat 如果你学过html,c ...

  8. Tomcat 组件介绍

    用了好长时间tomcat,但是其实自己只是反复听了这个名字,对Tomcat并不了解 1.Tomcat组件 Catalina Coyote Jasper Cluster 2.组件介绍 Tomcat Co ...

  9. tomcat配置介绍

    第一节java的介绍 java需要一个java的运行环境 JDK:包含了好几个java组件,包含类库(API) 开发工具(java) jvm(java虚拟机)JRE(类库) tomcat:开源  企业 ...

随机推荐

  1. 基于Netty的NIO优化实践

    1. 浅谈React模型 2. Netty TCP 3. Netty UTP

  2. K2P刷机教程转自恩山磨人的小妖精

    K2P刷机指南说明 K2P MTK版发布之初用的是22.5.7.85, 这个版本官改和高恪K2P固件都可以从斐讯固件基础上直接升级, 是所谓直刷.但好景不长, 之后的版本比如22.5.17.33就改了 ...

  3. stylish——一键为网页换肤,改变字体大小,去除广告

    今天给大家介绍的是一款非常好用的插件stylishstylish是一款可以为网站自定义主题的插件 可以在chrome的应用商店找到也可以通过网址访问https://userstyles.org/ 应用 ...

  4. Mavn 使用介绍

      1 Maven介绍 1.1 项目开发中遇到的问题 1.都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2.为什么在我的机器上可以正常打包,而配置管理员却打不出来? 3.项目 ...

  5. .NET开源工作流RoadFlow-Bug修改-1.8.2表单验证时ueditor编辑非空验证无效

    RoadFlow生成的表单,Ueditor编辑器不能进行非空验证的BUG修改: 1.修改控制器:WorkFlowFormDesignerController红框处: 2.修改js文件:Scripts/ ...

  6. ArcGIS软件操作——地图配准

    初次写博文,出现措词不当.表述不明确等之类的问题,敬请见谅,但会努力做好.同时,也欢迎各位提出意见,共同交流,共同进步! 直奔主题——运用ArcGIS软件对地图进行配准! 1 数据准备:网络下载的中国 ...

  7. python的异常处理和模块发布安装

    1.完整的异常处理 异常处理能够保证程序出错是也能够完整运行,不会应为bug而停止运行,这里介绍下获取异常的完整格式 try: num = int(input("输入整数:")) ...

  8. ES6入门——变量的解构赋值

    1.数组的解构赋值 以前为变量复制,只能直接指定值.现在ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 本质上,这种写法属于模式匹配,只要等 ...

  9. 微信小程序支付返回信息为空

    1.昨天公司说要实现微信小程序的支付,于是看了下微信小程序的开发api文档,和之前的app  端以及pc端基本相似:于是让他们把参数改了下,把之前的trade_type 由 app 改成 小程序要求的 ...

  10. 记录code修改

    package com.hesheng.myapplication; import android.content.Context;import android.graphics.Bitmap;imp ...