tomcat架构概览

这篇具有很好参考价值的文章主要介绍了tomcat架构概览。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://blog.csdn.net/ldw201510803006/article/details/119880100

前言

Tomcat 要实现 2 个核心功能:

  • 处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。
  • 加载和管理 Servlet,以及具体处理 Request 请求。

因此 Tomcat 设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。

Tomcat 支持的 I/O 模型:

  • NIO:非阻塞 I/O,采用 Java NIO 类库实现。
  • NIO.2:异步 I/O,采用 JDK 7 最新的 NIO.2 类库实现。
  • APR:采用 Apache 可移植运行库实现,是 C/C++ 编写的本地库。

Tomcat 支持的应用层协议有:

  • HTTP/1.1:这是大部分 Web 应用采用的访问协议。
  • AJP:用于和 Web 服务器集成(如 Apache)。
  • HTTP/2:HTTP 2.0 大幅度的提升了 Web 性能

Tomcat 为了实现支持多种 I/O 模型和应用层协议,一个容器可能对接多个连接器,就好比一个房间有多个门。但是单独的连接器或者容器都不能对外提供服务,需要把它们组装起来才能工作,组装后这个整体叫作 Service 组件。Service 本身没有做什么重要的事情,只是在连接器和容器外面多包了一层,把它们组装在一起。Tomcat 内可能有多个 Service,这样的设计也是出于灵活性的考虑。通过在 Tomcat 中配置多个 Service,可以实现通过不同的端口号来访问同一台机器上部署的不同应用。

最顶层是 Server,这里的 Server 指的就是一个 Tomcat 实例。一个 Server 中有一个或者多个 Service,一个 Service 中有多个连接器和一个容器。连接器与容器之间通过标准的 ServletRequest 和 ServletResponse 通信

Tomcat组件一览
Tomcat中的核心组件包含Connector和Engine两大类,分别负责对外 处理网络连接,对内处理业务请求
tomcat架构,tomcat,tomcat,架构,java
一、Tomcat核心组件
1、Server组件: Server是最顶级的组件,代表Tomcat运行的实例,在一个JVM中只会包含一个Server,包含:

  • Listener组件:在Server的整个生命周期中,不同阶段会有不同的会有不同的事情要完成,为扩展方便,它因此引入了监听器方式
  • GlobalNamingResources组件:方便在Tomcat中集成JNDI
  • Service核心组件

2、Service组件: 一个Server组件下可以包含多个Service组件,每个Service组件包含多个接收消息的Connector组件和处理请求的Engine组件。其中,不同的Connector组件使用不同的通信协议,如HTTP协议和AJP协议

3、Connector组件
主要职责是负责接收客户端连接并接收消息报文并解析,然后交给容器处理。因为要支持不同的协议,因此需要不同的Connector组件,每种协议对应一个Connector组件;目前Tomcat包含HTTP和AJP两种协议的Connector。根据网络I/O模型的不同方式,分为阻塞I/O和非阻塞I/O

  • Http11Protocal组件,是Http1.1版本的抽象,它包含接收客户端连接、接收客户端消息报文、报文解析处理、对客户端的响应等过程;主要由 JIoEndpoint组件和Http11Processor组件组成
  • Mapper组件:客户端请求的路由映射组件,可以将一个完整的路由映射到对应的Servlet
  • CoyoteAdaptor组件,将Connector和Container适配起来的适配器

可以发现,非阻塞模式相比阻塞模式多个一个Poller组件,该组件的职责是在非阻塞I/O方式下轮询多个客户端连接,不断检测(I/O连接是否就绪)、处理各种事件

4、Engine组件
Tomcat内部有4个级别的容器,分别是Engine、Host、Context和Wrapper。Engine代表全局Servlet引擎,每个Service组件只能包含一个Engine容器组件,但Engine组件能包含多个Host容器。除Host外,还包含一下几个组件

Listener组件:可以在Tomcat生命周期中完成某些Engine容器相关工作的监听器
AccessLog组件:客户端访问日志,所有的客户端访问都会被记录
Cluster组件:提供集群功能,可以将Engine容器需要的共享数据同步到集群中的其他Tomcat 实例上
Pipeline组件:Engine容器对请求进行处理的管道
Realm组件:安全管理器,提供了Engine容器级别的用户 - 密码 - 权限的数据对象,配合资源认证模块使用
5、Host组件
Tomcat中Host组件代表虚拟的主机,这些虚拟主机可以放在若干Web应用中的抽象(Context容器)。除了Context组件外,还包含如下组件:

Listener组件:可以在Tomcat生命周期中完成Host容器相关工作的监听器
AccessLog组件:客户端的访问日志,对该虚拟主机上所有的Web应用的访问日志都会被记录
Cluster组件:提供集群功能,可以将Host容器需要共享的数据同步到集群中的其他Tomcat实例上
Pipeline组件:Host容器对请求进行处理的管道
Realm组件:安全管理器,提供了Host级别的用户 - 密码 - 权限的数据对象,配合资源认证模块使用
6、Context组件
到Context这一级别,也就对应了我们的Web应用了。一个Context容器对应一个部署的Web应用。包含各种静态资源、若干Servlet(Wrapper容器)以及各种其他动态资源。主要包括如下组件:

Listener组件:可以在Tomcat生命周期中完成某些Context容器相关工作的监听器
AccessLog组件:客户端的访问日志,对该Web应用的访问都会被记录
Pipeline组件:Context容器对请求进行处理的管道
Realm组件:安全管理器,提供了Context容器级别的用户-密码-权限的数据对象,配合资源认证模块使用
Loader组件:Web应用加载器(这个不是类加载器,里面包含了类加载器),用于加载Web应用的资源,它要保证不同Web应用之间的资源隔离
Manager组件:会话管理器,用于管理对应Web容器的会话,包括维护会话的生成、更新和销毁
NamingResource: 命名资源,负责Tomcat配置文件的server.xml和Web应用的context.xml资源和属性映射到内存中
Wrapper组件:Context的核心子容器,也是Servlet的包装容器
7、Wrapper组件
对Servlet做了一层包装,一个Wrapper对应一个Servlet,包含如下组件:

Servlet组件:Servlet即Web应用开发常用的Servlet,我们会在Servlet中编写好请求的逻辑处理
ServletPool组件:Servlet对象池,当Web应用的Servlet实现了SingleThreadModel接口时则会在Wrapper中产生一个Servlet对象池。线程执行时,需先从对象池中获取到一个Servlet对象,ServletPool组件能保证Servlet对象的线程安全
Pipeline组件:Wrapper容器对请求进行处理的管道文章来源地址https://www.toymoban.com/news/detail-799874.html

到了这里,关于tomcat架构概览的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CH2--x86系统架构概览

    图中的实线箭头表示线性地址,虚线表示段选择器,虚线箭头表示物理地址 全局描述符表 (GDT) GDT是一个全局的段描述符表,它存储在系统内存中的一个固定位置。通常,GDT被加载到内存中的一个特殊寄存器中,这个寄存器被称为全局描述符表寄存器 (Global Descriptor Table Regis

    2024年02月07日
    浏览(22)
  • 【数仓建设系列之五】数仓选型架构概览

    【数仓建设系列之五】实时数仓选型架构概览 离线数仓(Offline Data Warehouse)和实时数仓(Real-time Data Warehouse)是数仓领域两种常见的数据存储和处理架构,它们在数据处理的方式、目标和时间性上有所不同,本文将重点介绍目前主流实时数仓架构设计。 一、离线和实时数仓

    2024年02月08日
    浏览(27)
  • 超融合基础架构(HCI)之深信服信服云aCloud方案的虚拟存储(VS,Virtual Storage)技术概览

    我们的梦想是浩瀚宇宙与星辰大海                  SDS(软件定义存储)是超融合基础架构(HCI)的重要一环,一般来说超融合基础架构(HCI)由三大模块组成,分别是计算虚拟化、网络虚拟化以及存储虚拟化,在超融合基础架构(HCI)之深信服信服云aCloud体系中分

    2024年02月10日
    浏览(79)
  • 【Java】Java 11 新特性概览

    Java 11 于 2018 年 9 月 25 日正式发布,且为长期支持版本(Long-Term-Support - LTS)。 下面为 Oracle Java SE 产品的一些关键产品日期示例(Oracle Java SE Product Releases): Java 11 对 Java 9 中引入并在 Java 10 中更新的 Http Client API 进行了标准化,实现了几乎完全重写,并且现在是完全异步非

    2024年02月07日
    浏览(30)
  • 【Java】Java 17 新特性概览

    Java 17 于 2021年09月14日 正式发布,且为长期支持版本(Long-Term-Support - LTS)。 Spring 6.x 和 Spring Boot 3.x 最低支持的 Java 17 ,这里敲黑板: Java 17 将是继 Java 8 以来最重要的长期支持版本 。 下面为 Oracle Java SE 产品的一些关键产品日期示例(Oracle Java SE Product Releases): 从 Java 1

    2024年02月05日
    浏览(37)
  • Java日志框架概览

      SLF4J 提供统一的日志门面API,即图中紫色部分,实现中立的日志记录API 桥接功能,蓝色部分,把各种日志框架API(绿色部分)桥接到SLF4J API。这样即便你的程序中使用各种日志API记录日志,最终都可桥接到SLF4J门面API。 适配功能,红色部分,可实现SLF4J API和实际日志框架(

    2024年02月11日
    浏览(29)
  • java 从零开始手写 RPC (00) 概览 overview

    rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo。 主要用于个人学习,由渐入深,理解 rpc 的底层实现原理。 基于 netty4 的客户端调用服务端 p2p 调用 serial 序列化支持 timeout 超时处理 register center 注册中心 load balance 负载均衡 callType 支持 oneway sync 等调用方式 fail 支持 failOve

    2024年03月08日
    浏览(52)
  • lnmp架构-tomcat session

    tomcat session共享 部署 tomcat 在server2 和 server3上进行同样的操作      保存的信息都会在tomcat日志中保存    tomcat 与nginx的整合 在server1上         当并发量开始增大时 就得做负载均衡   解决 当一个tomcat服务器挂掉后 另一个服务器上有第一个服务器上提交的数据问题 在serv

    2024年02月10日
    浏览(23)
  • 部署Nginx+keepalived+Tomcat集群架构

    部署Nginx+keepalived+Tomcat集群架构 集群架构背景 Nginx的高可用负载均衡架构 Nginx和LVS对比的总结: 搭建Nginx+keepalived+Tomcat的高可用负载均衡架构 关闭防火墙或开启8080端口; 删除webappsx下所有文件,创建ROOT目录了,添加ROOT/index.jsp页面,在页面中加入tomcat的IP地址,并打印出re

    2024年04月13日
    浏览(31)
  • 1. Tomcat整体架构及其设计精髓分析

    本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 1.Servlet规范的设计理念分析 2.如何理解Tomcat=Http服务器+Servlet容器 3.结合server.xml理解Tomcat整体架构 4.连接器Connector的设计思路分析 5.适配器和模板方法模式在Tomcat中的应用 6.Tomcat多层容

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包