Tomcat架构设计及组件详解

news2024/11/17 3:39:16

Tomcat配置详解(Tomcat配置server.xml详解)Tomcat配置详解(Tomcat配置server.xml详解)_tomcat xml配置https://blog.csdn.net/imwucx/article/details/132166738文章之后,深入的学习tomcat相关知识,对Tomcat的组件进进补充和记录。

目录

一、Tomcat整体架构图

二、Tomcat整体树形结构

三、组件说明

四、配置文件

五、源码结构

5.1 java 目录的子目录

5.2 jakarta

5.3 org.apache


一、Tomcat整体架构图

55f5edfbfa05468a91232a727f3cbc26.png

二、Tomcat整体树形结构

1cd06a70b8964f92a0f0c85f0f0fdd27.png

如上图所示,为何是这样的组合?

  • Tomcat需要一个对象来代表整个Servlet容器,引入了Server组件。
  • Tomcat需要一个组件来包含一个或者多个连接器,引入了Service组件。
  • Tomcat需要一个用于接收客户端并处理协议相关的功能,引入了Connector连接器。
  • Tomcat需要一个用于实现HTTP中指定服务主机的功能,引入了Host组件。
  • Tomcat需要一个用于表示Web应用的功能,引入了Context。
  • Tomcat需要一个用于表示Servlet的功能,引入了Wrapper。

三、组件说明

  1. Server组件: 代表整个Tomcat Servlet容器,一个Server可以包含一个或者多个Service,包括一组全局的命名资源,即naming resource。
  2. Listener组件:也称LifecycleListener,用于监听组件在整个生命周期过程中产生的事件,从而完成响应相应的动作。
  3. Global Naming Resources:包含公用的全局命名资源。
  4. Service组件:用于管理连接器和引擎,其中包含了一个或者多个连接器和一个引擎组件。
  5. Connector组件:包含协议处理器,用于实现Tomcat中定义的Coyote连接器,HTTP协议也是在连接器这一层实现的。
  6. 线程池:Connector中包含的线程池为Tomcat的业务线程池,通过这个线程池可以将耗时的操作放到线程池中执行,连接器只需要处理连接、读写数据即可,极大地增强了Tomcat的性能。 
  7. Engine组件:是一个容器,表示整个Tomcat的Servlet容器的引擎,其中包含一组Host组件。可以从上图中看到它是包含的容器的最顶层容器。
  8. Value组件:一般为多个,它们之间形成一个链表一起处理组件内部的动作。通常将一系列的Value组件放进Pipeline(流水线)组件中,让它们组成一条Value流水线,处理当前传入包含组件的请求。
  9. Cluster组件:表示当前多个Tomcat服务器组成了一个集群,集群之间可以互相传输共享信息。如,可以使用Cluster组件实现Session共享,不过这种方式效率较低,一般不建议使用这种方式。通常使用Redis共享会话信息。
  10. Realm组件:表示一个只读的安全域门面,通常使用Realm验证不同的用户,并且授予这些用户相应的访问规则。Realm组件通常和容器等级的组件联合使用。
  11. Host组件:表示一个包含在Engine组件听虚拟主机容器。内部包含一个或者多个Context容器,可以通过Host组件隔离不同的Context,将它们放到不同的虚拟主机中。
  12. Context组件:表示一个Servlet上下文,通常包含在Host容器中,顶层容器必须是引擎组件。Context组件代表Web应用程序。
  13. Filter组件:属于J2EE定义表示一个请求的过滤器,也称为拦截器链,当请求在访问到最终的Servlet组件前,必须经过所有的拦截器链才能访问。
  14. Manager组件:用于管理与Context组件绑定的Session池,不同的Manager组件可以自定义添加自己的处理Pipeline(由Value组件组成)将Session进行持久化。
  15. Resource Like组件:代表了一个Web应用程序的资源链表,即在配置文件中定义的Resource标签的信息。这些资源链访问Global Naming Resources中的资源。
  16. Resource组件:代表一个命名资源对象。
  17. Loader组件:代表了一个Java类加载器,用于在容器中加载必要的类文件,通常用于热部署时应用上下文类文件。

四、配置文件

// 配置服务器,关闭服务器的端口号为8005
<Server port="8005" shutdown="SHUTDOWN">
    // 配置版本日志监听器
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    // 配置Apr本地库加载监听器
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    // 配置Jre内存泄漏监听器
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    // 配置全局资源JNDI与JMX监听器
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    // 配置预防ThreadLocal发生内存泄漏监听器
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    <GlobalNamingResource >
        // 配置用户数据库资源,默认为内存数据库,用于保存访问Tomcat的管理页的用户密码
        <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml"/>
    </GlobalNamingResource>
    
    // 定义服务对象
    <Service name="Catalina">
        // 定义HTTP连接器,指定端口,协议,连接超时时间和重定向端口
        <Connector port="8080" protocol="HTTP/1.1" connectionTimout="20000" redirectPort="8443"/>
        // 定义引擎对象,并指定默认的虚拟主机为localhost
        <Engine name="Catalina" defaultHOst="localhost">
            // 定义锁定对象的Realm,当用户尝试登录次数太多后,将会锁定用户
            <Realm className="org.apache.catalina.realm.LockOutRealm">
                // 定义组合在LockOutRealm内部的,使用JNDI定义的用户数据库对用户进行较难的Realm对象
                <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDataBase" />
            </Realm>
            // 宝义虚拟主机对象,并指定名称,Web上下文目录,是否自动解压war包,是否自动部署
            <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
                <Valve className="org.apache.catalina.values.AccessLogValue" directory="logs" prefix="local_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />/>
            </Host>
        </Engine>
    </Service>
</Server>
  • Server: 服务器对象
  • Service: 服务对象
  • Global Naming Resources: 全局命名资源
  • Connector: HTTP连接器
  • Engine: 引擎对象
  • Realm: 用户身份信息校验
  • Host: 虚拟主机
  • Valve: 阀门

五、源码结构

1. /bin目录

        存放启动、关闭Tomcat和其它脚本文件。.sh结尾的文件为UNIX系统使用,.bat结尾的文件为Windows系统使用。

2. /conf目录

        存放Tomcat配置文件和相关DTD定义,其中最重要的文件是server.xml,它是tomcat容器和组件的主要配置文件。

3. /logs目录

        存放Tomcat运行时产生的日志文件,是默认的日志文件日录。

4. /webapps目录

        存放Web应用,Tomcat会自带几个默认项目存放在该目录中。

5. /res目录

        存放Tomcat的资源文件,如icon图标,欢迎页HTML文件。

6. /modules目录

        存放Tomcat依赖的模块组件源码。

7. /java目录

        存放Tomcat的主要源码文件,即主要研究对象。

5.1 java 目录的子目录

详细介绍如下:

bc6146c1da6d47e88961b93ffebef4ba.png

5.2 jakarta

该目录存放jakarta扩展的接口表述,即J2EE的接口文件。(如上图)

旧版的包名不是java.jakarta,为什么取包名为java.jakarta?原因是Oracle公司收购sun公司之后,Oracle将Java EE 移交给了 Eclipse 基金会,但不允许使用Java这个前缀,Eclipse基金会强烈争取不改名,没谈拢,最后将Java EE改名为Jakarta EE。

5.3 org.apache

用于存放Tomcat的源代码,其中每个目录的存放内容如下。(如上图)

  • catalina:该目录存放Tomcat的核心文件,包括容器、组件。
  • coyote:该目录存放协议相关的内容,如HTTP1.1、HTTP1.2、AJP待协议处理器。
  • el:该目录用于存放el表达式解析的相关内容。
  • jasper:该目录存放JSP引擎的相关内容。
  • juli:该目录存放JULI日志框架的源码。
  • naming:该目录存放JDNI的相关内容。
  • tomcat:该目录存放tomcat工具类,如jar包扫描组件、DBCP连接池源码、InstanceManager实例化管理器等组件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子会计档案怎么管?电子凭证怎么入账归档?泛微文书定帮您解决

随着数字经济的发展&#xff0c;会计档案领域关键政策不断推进&#xff0c;逐渐向数字化发展。 2015年12月&#xff0c;财政部、国家档案局令第79号《会计档案管理办法》&#xff1a;确定电子会计档案的概念和管理要求&#xff0c;明确会计档案可仅以电子形式归档保存。 2020…

3D医学影像PACS系统源代码

一、系统概述 3D医学影像PACS系统&#xff0c;它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成&#xff0c; 具有完善的影像数据库管理功能&#xff0c;强大…

混合项目管理:如何成功地整合传统与敏捷方法?

若你尚未涉足于混合项目管理这一领域&#xff0c;且暗自以为其难以捉摸、令人费解&#xff0c;我们向你承诺&#xff0c;实则并非如此。 在深入探究混合项目管理这一主题之前&#xff0c;我们先澄清几项基础但关键的专业术语。在当今这个商业竞争愈发激烈的环境中&#xff0c;项…

4G网络广播模块 4G网络广播开发模块

SV-6209 4G网络广播模块 4G网络广播开发模块 一、描述 SV-6209网络音频模块是一款带2*40W功放输出的4G广播音频模块&#xff0c;采用高性能ARM处理器及专业Codec&#xff0c;能接收4G广播音频数据流&#xff0c;转换成音频模拟信号输出。带有一路line in输入&#xff0c;通过外…

jmeter生成html格式接口自动化测试报告

jmeter自带执行结果查看的插件&#xff0c;但是需要在jmeter工具中才能查看&#xff0c;如果要向领导提交测试结果&#xff0c;不够方便直观。 笔者刚做了这方面的尝试&#xff0c;总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安…

linux安装sqoop

一 解压安装包 这里提供了网盘资源 链接: https://pan.baidu.com/s/1QkFqVnlvuOJ_aB2bjn-OKg?pwducsy 提取码: ucsy 这里有两个压缩包&#xff0c;sqoop-1.4.7.tar.gz是 sqoop 的安装包&#xff0c;另一个是我们需要里面的一些 jar 包 解压 安装包 tar -zxf ./sqoop-1.4.7.t…

【自动驾驶】PETR 环境安装与测试

1.环境安装 该工程依赖MMCV&#xff0c; MMDetection&#xff0c; MMDetection3d&#xff0c;MMSegmentation Install MMCV pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.htmlexamples&#xff1a; pip install…

VR全景展示的功能有哪些?你了解多少?

VR全景展示作为一种全新的视觉体验技术&#xff0c;能够为人们带来强烈的视觉效果以及沉浸式的观感&#xff0c;在旅游、房地产、车展、博物馆等都有着十分广泛的应用。这种富媒体技术&#xff0c;具有很好的交互性和沉浸感&#xff0c;能够带给大家更好的体验&#xff0c;那么…

为什么选择事件驱动的微服务架构?

在当今动态的业务环境中&#xff0c;开发人员面临越来越大的压力&#xff0c;需要提供快速、可靠、可扩展的解决方案&#xff0c;以满足不断变化的业务需求&#xff0c;而事实证明&#xff0c;传统应用程序是实现这些目标的障碍。微服务提供了一种易于理解且有前途的替代方案&a…

2023自动化测试需知的4项测试工具!

一般来说学自动化会建议大家先学selenium&#xff0c;因为最早的时候&#xff0c;自动化就代表selenium&#xff0c;进入测试行业就开始做接口测试&#xff0c;而且现在基本每个公司都需要接口测试。今天就和大家聊一下接口测试的工具。 一、Robot Framework 机器人框架。之所…

AI Studio星河社区生产力实践:基于文心一言快速搭建知识库问答

还在寻找基于文心一言搭建本地知识库问答的方案吗&#xff1f;AI Studio星河社区带你实战演练&#xff08;支持私有化部署&#xff09;&#xff01; 相信对于大语言模型&#xff08;LLM&#xff09;有所涉猎的朋友&#xff0c;对于“老网红”知识库问答不会陌生。自从大模型爆火…

亚马逊封买家账号的原因有哪些

亚马逊可能封锁买家账号的原因有多种&#xff0c;主要是出于保护市场和维护平台秩序的考虑。以下是一些可能导致亚马逊封锁买家账号的常见原因&#xff1a; 1、涉及违规行为&#xff1a;如果买家违反了亚马逊的使用政策&#xff0c;如发表虚假评价、滥用退货政策、欺诈或盗窃等…

GitHub 执行定时任务之巴奴会员签到

经常忘记去点那么一下&#xff0c;人到中年记忆力衰退的厉害。所以… 前言 巴奴算是签到算是比较简单的那种&#xff0c;没有太多的限制&#xff0c;可能获取积分的大多是人都还是要去门店的吧&#xff0c;也没必要做太多的限制。 打开签到每日提醒后&#xff0c;自动推送的地…

软件测试工作的基本流程详解

软件测试报告 首先&#xff0c;作为测试人员需要学习并了解业务&#xff0c;分析需求点 为什么测试人员要参加需求分析&#xff1f;也就是进行测试需求分析的目的是什么&#xff1f; 第一、把用户需求转化为功能需求&#xff1a; 1、对测试范围进度量 2、对处理分支进行度量…

nature子刊|病毒与宿主微生物的“花式”互作!

期刊&#xff1a;nature microbiology 影响因子&#xff1a;28.3 发表时间&#xff1a;2023年5月 病毒是地球上最丰富多样的生命形式&#xff0c;存在于每一个环境中。深海中病毒与宿主的互作以及它们对生态系统的影响和功能尚不清楚。今天给大家来带…

使用Python CV2自动识别人脸并融合至新图片

需求说明 最近孩子很迷奥特曼&#xff0c;想尝试拿他的照片跟奥特曼合并下做个帅酷变身。我想一般的PS跟现在流行的AI工具应该都可以实现&#xff0c;但是咱是程序员可以尝试用Python来做一下嘛。 实现思路 Python图片处理离不开CV2库&#xff0c;这个实现思路很清晰。先根据…

【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)

restful是web编程里重要的概念 – 一种接口规范也是一种接口设计风格 设计接口&#xff1a; 要考虑&#xff1a;数据返回、接收数据的方式、url、方法 统一风格 rest–表现层状态转移 web–每一类数据–资源 资源通过http的动作来实现状态转移 GET、PUT、POST、DELETE path…

Tomcat修改配置文件

1.Tomcat启动乱码问题 1.1conf目录 说明&#xff1a;找到conf目录下logging.properties文件 1.2打开logging.properties文件 说明&#xff1a;将UTF-8修改成GBK 1.3.效果 2.端口冲突问题 2.1 conf目录 2.2打开 server.xml文件 2.3.修改端口 说明&#xff1a;port指的就是端…

自动化测试框架实战详解

前言 之前文章跟大家分享了一下自己在接口自动化测试中进行测试准备的一些相关知识点&#xff0c;接下来本篇文章详细分享一下接口自动化框架设计的思路总结&#xff0c;希望能对初次探索接口自动化测试的小伙伴们有一些思路上的帮助。 小编是以pythonrequestsunittestHTMLTes…

淘礼金红包检测,规避订单返款/转账资损问题的技术实现方案

先说业务场景&#xff1a;很多电商人在订单转账或返款时&#xff0c;可能会因订单使用了如首单礼金/新品礼金/优惠劵或其他红包类型&#xff0c;导致资金损失问题。如下图所示&#xff1a; 再说解决方案&#xff1a;具体规避这类订单红包的资损&#xff08;返款/转账多返&#…