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 主要的无代码和低代码工具和供应商无代码平台低代码…

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

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

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

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

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;为用户预留内容占位符…

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 配置…

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中为…

MATLAB中filloutliers函数用法

目录 语法 说明 示例 在向量中对离群值进行插值 使用均值检测和最邻近值填充方法 使用移窗检测法 填充矩阵行中的离群值 指定离群值位置 返回离群值阈值 filloutliers函数功能是检测并替换数据中的离群值。 语法 B filloutliers(A,fillmethod) B filloutliers(A,f…

聚观早报 | iPhone 15系列正式发布;月饼专利申请超10000项

【聚观365】9月14日消息 iPhone 15系列正式发布 月饼专利申请超10000项 “五个女博士”自建研究院 2023中国民营企业研发十强公布 华为和小米达成全球专利交叉许可协议 iPhone 15系列正式发布 2023年苹果秋季新品发布会如期而至。发布会上&#xff0c;苹果发布了iPhone 1…

STM32 CAN使用记录:FDCAN基础通讯

文章目录 目的基础说明关键配置与代码轮询方式中断方式收发测试 示例链接总结 目的 CAN是非常常用的一种数据总线&#xff0c;被广泛用在各种车辆系统中。这篇文章将对STM32中FDCAN的使用做个示例。 CAN的一些基础介绍与使用可以参考下面文章&#xff1a; 《CAN基础概念》htt…

基于Xml方式Bean的配置-Bean的延时加载

SpringBean的配置详解 Bean的延时加载 当lazy-init设置为true时为延时加载&#xff0c;也就是当Spring容器创建的时候&#xff0c;不会立即创建Bean实例&#xff0c;等待用到时再创建Bean实例并储存到单例池中&#xff0c;后续使用该Bean时直接从单例池中获取即可&#xff0c;…

手把手教你搭建农产品商城小程序:详细步骤解析

随着移动互联网的普及&#xff0c;越来越多的人开始关注如何在手机上进行购物&#xff0c;尤其是对于农产品这类日常生活所需品。本文将手把手教你搭建一个农产品商城小程序&#xff0c;让你轻松实现在手机上购买农产品的愿望。 一、登录乔拓云网后台 首先&#xff0c;我们需要…

83 # 静态服务中间件 koa-static 的使用以及实现

静态服务中间件&#xff1a;koa-static 中间件可以决定是否向下执行&#xff0c;如果自己可以处理&#xff0c;那么直接处理完毕结束&#xff0c;如果自己处理不了&#xff0c;next 方法会继续向下执行 新建 public 文件夹&#xff0c;里面添加 index.html、style.css 文件 …

使用IDEA开发Servlet

一、新建工程 二、填写新工程的基本信息 javaee8的项目可以运行在tomcat9 三、配置tomcat 1、编辑server信息 “On frame deactivation”的意思是idea窗口发生切换时。 2、编辑部署信息 war exploded方式&#xff0c;这种方式是以文件夹方式部署的&#xff0c;支持热加载。 …

400电话客服中心电话:为您提供全方位的客户服务

在现代商业环境中&#xff0c;提供优质的客户服务是企业成功的关键之一。为了满足客户的需求和解决问题&#xff0c;许多企业选择设立400电话客服中心。400电话是一种特殊的电话号码&#xff0c;可以通过固定电话和移动电话拨打&#xff0c;客户可以通过这个号码与企业进行沟通…