Tomcat整体介绍

来源

本文整理自 <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容器对请求进行处理的管道。

原文地址:https://www.cnblogs.com/wansw/p/10228973.html

时间: 2024-10-11 01:24:58

Tomcat整体介绍的相关文章

【Tomcat】tomcat简单介绍,安装以及启动(一)

最为一个资深的吊死程序猿,在工作中,经常使用tomcat,但是从来没有做过深入的总结,真是罪过.从这篇博文开始,我们对tomcat进行一个深入的学习,先是基本使用学习,之后我们再看一看tomcat的源码部分.不多说了,我们直接进入正题: tomcat介绍: Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet

tomcat组成介绍和调优方案

1.tomcat组成介绍 1.1 目录组成介绍 1.2 启动tomcat中遇到的问题 a.启动过程中出现很多异常:因为端口被占用了 解决方式1:修改Tomcat\conf\server.xml中的默认端口 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 解决方式2:关掉占用8080

Tomcat理论介绍

在介绍Tomcat之前我们再来好好回顾一下Servlet和JSP Servlet是一种CGI技术,能实现让Java开发动态的Web资源,并通过CGI技术与前端的Web服务器进行通信,但其对HTML文档的定义都要有JAVA程序来实现,任何静态资源以发生修改都要重新编译整个Java页面程序,非常的麻烦,并且Java程序员必须了解前端HTML的展示方式 servlet也可以被认为是服务器端的applet.servlet被Web服务器加载和执行,就如同applet被浏览器加载和执行一样.servlet从

JAVA学习-Tomcat服务器介绍

Apache的开源web服务器.可以解析php,js,css,一起jsp/Servlet容器. 安装Tomcat7安装包. 第一步,先下载Tomcat服务器. 下载地址 http://tomcat.apache.org/download-70.cgi#7.0.67 第二步,解压到硬盘. D:\apache-tomcat-7.0.67 第三步,配置环境变量. 系统变量,新建变量CATALINA_HOME名.变量值就是第二步中的服务器根目录. 第四步,测试首页. 运行Tomcat服务器,bin目录下

tomcat的介绍

1首先tomcat是apache开发的!是免费的应用当前最广的javaweb服务器!我们安装的是6.0  目前最高版本是8.0 http://tomcat.apache.org/登陆网址下载!目前我们用的是绿色版!无需安装,解压即可! 启动Tomcat需要配置环境变量JAVA_HOME,我们必须在启动前吧JAVA_HOME 配置好! 1)首先我的电脑右键属性,然后找到环境变量然后配置JAVA_HOME为jdk的安装目录注意要到/bin不要带上! 2)配置好后就可以start.bat启动服务了(当

Tomcat(介绍,JDK安装,Tomcat安装,配置Tomcat监听80端口)

一.Tomcat介绍 目前有很多网站是用Java编写的,所以解析Java程序就必须有相关的软件来完成,Tomcat就是其中之一 Tomcat是Apache软件基金会,的Jakarta项目中的一个核心项目,由apache.sun和其他一些公司及个人共同开发而成,Tomcat技术先进,性能稳定而且免费,因而深受Java爱好者的喜欢,并得到部分开发商的认可,成为目前比较流行的web因公服务器. Java程序写的网站用Tomcat+jdk来运行的. tomcat是一个中间件,真正起作用的,解析java脚

Apache Flink 整体介绍

前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topic 里面实时读取到监控数据,并将读取到的监控数据做一些 聚合/转换/计算 等操作,然后将计算后的结果与告警规则的阈值进行比较,然后做出相应的告警措施(钉钉群.邮件.短信.电话等).画了个简单的图如下: 目前告警这块的架构是这样的结构,刚进公司那会的时候,架构是所有的监控数据直接存在 ElasticS

Tomcat 服务器介绍和使用

服务器的概念和作用: 问题: 学习了 java 编程之后,java 代码的一个很重要的作用就是进行数据的处理,但是目前来说我们运行编写的代码,只有一次性,也就是运行完毕后,如果需要再次运行则需要再次手动启动代码的执行.但是我们无法提前用户会何时发送请求,也就无法决定我们编写的 java 代码应该什么时候启动运行.而且手动运行也变得不现实. 解决: 那么根据 java 的网络编内容,我们是不是可以使用代码编写一个容器 (对象) 呢?,该容器可以根据用户的请求来启动并运行我们编写的数据逻辑代码.答案

Tomcat 配置介绍

参数 介绍 maxThreads 最大可以创建请求的线程数 minSpareThreads 服务启动时创建的处理请求的进程数 Connector中的port 创建服务器端的端口号,此端口监听用户端的请求 enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 redirectPort 指定服务器正在处理http请求时收到一个SSL传输请求后重定向的端口