Tomcat架构设计及组件详解

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.mzph.cn/news/81729.shtml

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

相关文章

基于SSM+Vue的“魅力”繁峙宣传网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...

全文链接&#xff1a;http://tecdat.cn/?p23061 这个数据集&#xff08;查看文末了解数据免费获取方式&#xff09;可以追溯到1988年&#xff0c;由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数&#xff0c;0无…

无代码和低代码平台:程序员的竞争优势

无代码和低代码平台&#xff1a;程序员的竞争优势 无代码和低代码平台&#xff1a;程序员的竞争优势摘要引言1. 了解无代码和低代码平台1.1 无代码和低代码平台的定义无代码平台低代码平台 1.2 它们如何简化应用程序开发1.3 主要的无代码和低代码工具和供应商无代码平台低代码…

matlab 13折线法数据量化编码与解码

解码 matlab 13折线法数据量化编码请查看>>链接 matlab源码: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %sp=[0,16,32,64,128,256,512,1024]; %每段起始值 %spmin=[1,1,2,4,8,16,32,64]; %11110011--1248 c1=1 正…

32、歇后语大全API,免费好用

1、前言 歇后语大全查询API接口&#xff0c;这个是RollToolsApi通用系列接口的其中一个&#xff0c;内部包含了3个小接口&#xff0c;可查询歇后语信息。 查看接口完整信息&#xff1a;https://www.mxnzp.com/doc/detail?id36 RollToolsApi通用系列接口包含多很多免费通用的…

【八大经典排序算法】堆排序

【八大经典排序算法】堆排序 一、概述二、思路解读三、代码实现&#xff08;大堆为例&#xff09; 一、概述 堆排序是J.W.J. Williams于1964年提出的。他提出了一种利用堆的数据结构进行排序的算法&#xff0c;并将其称为堆排序。堆排序是基于选择排序的一种改进&#xff0c;通…

蓝牙核心规范(V5.4)10.1-BLE 入门笔记(1)

ble 规范 深入了解蓝牙LE需要熟悉相关的规格。蓝牙LE的架构、程序和协议由一项关键规范完全定义,称为蓝牙核心规范。产品如何使用蓝牙以实现互操作性由两种特殊类型称为配置文件和服务的规范集合所涵盖。图1展示了BLE规范类型及其相互关系。 1.1 蓝牙核心规范 蓝牙核心规范是…

代码随想录二刷day32

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣122. 买卖股票的最佳时机 II二、力扣55. 跳跃游戏三、力扣45. 跳跃游戏 II 前言 一、力扣122. 买卖股票的最佳时机 II class Solution {public int ma…

SpringBoot整合Easy-ES实现对ES操作

请确保已有可用的ES&#xff0c;若没有&#xff0c;请移步&#xff1a;Docker安装部署ElasticSearch&#xff08;ES&#xff09; 新建SpringBoot项目 这里是用的springboot版本是2.6.0 引入依赖 <!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突--><…

Redis五大基本数据类型

1、字符串类型 字符串类型相当于 java 中的 String 类型。Redis 中的 String 类型以二进制方式存储&#xff0c;不会做任何的编码转换&#xff0c;因此不仅仅可以存储文本数据、整数、普通的字符串、JSON、xml文件&#xff0c;还可以存储图片、视频、音频。String 存储的种类虽…

插槽指的是什么?插槽的基础用法体验

什么是插槽 插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时&#xff0c;把不确定的、希望由用户指定的部分定义为插槽。 <template><p>这是MyCom1组件的第1个p标签</p><&#xff01;--通过slot标签&#xff0c;为用户预留内容占位符…

ubuntu文件上有锁

1 文件上有锁&#xff0c;如何解锁&#xff1f; sudo chmod 777 filenamefilename要替换成你要解锁的文件名称 2 文件夹上有锁&#xff0c;如何解锁&#xff1f; sudo chown -R username filenameusername就是你Ubuntu系统安装的时候取得名字&#xff0c;filename就是被锁文…

Vue3 Ajax(axios)异步

文章目录 Vue3 Ajax(axios)异步1. 基础1.1 安装Ajax1.2 使用方法1.3 浏览器支持情况 2. GET方法2.1 参数传递2.2 实例 3. POST方法4. 执行多个并发请求5. axios API5.1 传递配置创建请求5.2 请求方法的别名5.3 并发5.4 创建实例5.5 实例方法5.6 请求配置项5.7 响应结构5.8 配置…

mysql设置max_sp_recursion_depth,sql_mode

mysql 中设置 @@max_sp_recursion_depth select @@max_sp_recursion_depth; 今天在mysql 写存储过程递归调用时,发现老是报错(recovery limit 0(as set by the max_sp_recursion_depth));后来百度下发现 max_sp_recursion_depth设置不对; 这个修改涉及到全局和session级修…

Python常用做题笔记

1 列表/队列/堆栈构建 列表&#xff1a; []声明列表比list()方法效率高 声明队列和堆栈&#xff1a;法1: 使用[]/list()方法模拟法2: 使用collections.deque双端队列&#xff1a; 模拟队列 append\popleft 模拟堆栈 append\pop collections.deque(): 声明双端队列&#xff0c;…

2024字节跳动校招面试真题汇总及其解答(四)

12.Java的类加载机制 Java的类加载机制是指将描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 类的加载过程分为以下五个阶段: 加载:将Class文件从磁盘读入内存,并…

jvm的调优工具

1. jps 查看进程信息 2. jstack 查看进程的线程 59560为进程id 产生了死锁就可以jstack查看了 详细用途可以看用途 3. jmap 如何使用dump文件看下 查看 4.jstat 空间占用和次数 5. jconsole可视化工具 各种使用情况&#xff0c;以及死锁检测 6. visualvm可视化工具…

SpringMVC自定义注解---[详细介绍]

一&#xff0c;对于SpringMVC自定义注解概念 是一种特殊的 Java 注解&#xff0c;它允许开发者在代码中添加自定义的元数据&#xff0c;并且可以在运行时使用反射机制来获取和处理这些信息。在 Spring MVC 中&#xff0c;自定义注解通常用于定义控制器、请求处理方法、参数或者…

面试题四:请解释一下watch,computed和filter之间的区别

watch与computed、filter&#xff1a; watch:监控已有属性&#xff0c;一旦属性发生了改变就去自动调用对应的方法 computed:监控已有的属性,一旦属性的依赖发生了改变&#xff0c;就去自动调用对应的方法.computed有详细的介绍&#xff0c;移步computed的使用 filter:js中为…

最优化方法Python计算:BFGS算法

按秩1法&#xff08;详见博文《最优化方法Python计算&#xff1a;秩1拟牛顿法》&#xff09;计算的修正矩阵 Q k 1 Q k E k \boldsymbol{Q}_{k1}\boldsymbol{Q}_k\boldsymbol{E}_k Qk1​Qk​Ek​无法保证其正定性。这时&#xff0c; d k 1 − Q k 1 g k 1 \boldsymbol{d…