Tomcat架构解析
Tomcat: 是基于JAVA语言的轻量级应用服务器,是一款完全开源免费的Servlet服务器实现。
1. 总体设计
socket: 其实就是操作系统提供给程序员操作“网络协议栈”的接口,你能通过socket的接口,来控制协议,实现网络通信,达到跨主机通信。
- 监听socket
- 已完成连接socket
类加载器: 与普通程序不同的是,JAVA程序(class文件)并不是本地的可执行程序。当运行JAVA程序时,首先运行JVM,然后把Java.class加载到JVM里头运行,负责加载Java.class的这部分就是类加载器。
JVM默认提供了3个类加载器:
- Bootstrap: 用于加载JVM提供的基础运行类,即位于%JAVA_HOME%/jre/lib目录下的核心类库。
- Extension: JAVA提供的一个标准的扩展机制用于加载除核心类库外的Jar包。默认的扩展目录是%JAVA_HOME%/jre/lib/ext。
- System: 用于加载环境变量CLASSPATH指定目录下的或者-classpath运行参数指定的Jar包。
2. Catalina
Catalina是Tomcat提供的Servlet容器实现,它负责处理来自客户端的请求并输出响应。
对于Tomcat来说,Servlet容器是其核心组件。所有基于JSP/Servlet的JAVAWeb应用均需要依托于Servlet容器运行并对外提供服务。
Tomcat本质上是一款Servlet容器,因此Catalina是Tomcat的核心,其他模块均为Catalina提供支撑。
Catalina使用Digester解析XML配置文件并创建应用服务器。
Digester: 是一款用于将XML转换为JAVA对象的事件驱动型工具,是对SAX(同样为事件驱动型XML处理工具,已包含到J2SE基础类库当中)的高层次封装。
2.3 创建Server
Server的解析:
- 创建Server实例
- 创建全局J2EE企业命名上下文
- 为Server添加生命周期监听器
- 构造Service实例
- 为Service添加生命周期监听器
- 为Service添加Executor
- 为Service添加Connor
- 为Connector添加虚拟主机SSL配置
- 为Connector添加生命周期监听器
- 为Connector添加升级协议
- 添加子元素解析规则
Engine的解析:
- 创建Engine实例
- 为Engine添加集群配置
- 为Engine添加生命周期监听器
- 为Engine添加安全配置
Host的解析:
- 创建Host实例
- 为Host添加集群
- 为Host添加生命周期管理
- 为Host添加安全配置
Context的解析:
- context实例化
- 为Context添加生命周期监听器
- 为Context指定类加载器
- 为Context添加会话管理器
- 为Context添加初始化参数
- 为Context添加安全配置以及Web资源配置
- 为Context添加资源链接
- 为Context添加Value
- 为Context添加守护资源配置
- 为Context添加Cookie处理器
2. 4 Web应用加载
web应用加载属于Server启动的核心处理过程。
Catalina对Web应用的加载主要由StandardHost、HostConfig、StandardContext、Context-Config、StandardWrapper这5个类完成。
2.5 Web请求处理
。。。
Tomcat在$CATALINA_BASE/conf/web.xml中默认定义了两个Servlet:
- DefaultServlet: 主要用于处理静态资源,而且为了提升服务器性能,Tomcat对访问文件进行了缓存。
- JspServlet: 负责处理所有JSP文件的请求。
Coyote
仅有Servlet容器服务器是无法对外提供服务的,还需要由链接器接受来自客户端的请求,并按照既定协议(如HTTP)进行解析,然后交由Servlet容器处理。
Coyote是Tomcat链接器框架的名称,是Tomcat服务器提供的供客户端访问的外部接口。客户端通过Coyote与服务器建立链接、发送请求并接受响应。
Coyote封装了底层的网络通信(Socket请求及响应处理),为Catalina容器提供了统一的接口,使Catalina容器与具体的请求协议及I/O方式解耦。Coyote将Socket输入转换为Request对象,交由Catalina容器进行处理,处理请求完成后,Catalina通过Coyote提供的Response对象将结果写入输出流。
Jasper
Tomcat的JSP引擎——Jasper
Tomcat性能调优
性能测试和性能优化是软件开发中非常重要的两项工作。性能优化涵盖的范围非常广,即包括网络、磁盘、数据库,又包括服务器、应用系统代码优化,既涉及各个角色的协作,如运维工程师对基础设备的优化、DBA对数据库的优化、开发人员对资源访问及算法的优化。
过早的优化是一切邪恶的根源。
传输安全(SSL)
SSL协议的3个特性:
- 保密
- 鉴别
- 完整性
从性能角度考虑,加解密是一项计算昂贵的处理,因此尽量不要将整个web应用采用SSL链接,实际部署过程中,选择有必要进行安全加密的页面(如存在敏感信息传输的页面)采用SSL通信。
HTTPS是在HTTP的基础上加入了安全套接字(SSL)。SSL主要用于客户端与服务器端之间的身份认证和数据传输加密。
相关文章:
Tomcat架构解析
Tomcat: 是基于JAVA语言的轻量级应用服务器,是一款完全开源免费的Servlet服务器实现。 1. 总体设计 socket: 其实就是操作系统提供给程序员操作“网络协议栈”的接口,你能通过socket的接口,来控制协议,实现网络通信,达…...
如何在 Kubernetes 上部署和配置开源数据集成平台 Airbyte?
在 Kubernetes 上部署和配置 Airbyte 是一个复杂但非常有价值的过程,特别是对于需要强大数据集成和数据处理能力的企业或团队。Airbyte 是一个开源的数据集成平台,允许用户从各种来源提取数据并加载到目标存储中。其强大的插件系统支持多种数据源与目标&…...
信息技术与商业变革:机遇与挑战
信息技术与商业变革:机遇与挑战 目录 引言信息技术推动商业变革的主要因素 数字化转型的加速客户需求的个性化创新技术的应用 信息技术在企业中的应用场景 供应链管理的智能化营销与客户关系管理财务与资源管理的自动化远程工作和协作 信息技术带来的挑战 网络安全…...
JavaWeb之过滤器
1. 过滤器的概念 过滤器是Java Servlet规范中定义的组件,用于在请求到达Servlet之前或响应返回客户端之前,对请求或响应进行拦截和处理。过滤器可以实现以下功能: 日志记录:记录请求的详细信息,如URI、参数、时间等。…...
学习 笔记
bin log/redo log/undo log MySQL日志主要包括查询日志、慢查询日志、事务日志、错误日志、二进制日志等。其中比较重要的是 bin log(二进制日志)和 redo log(重做日志)和 undo log(回滚日志)。 慢SQL查询&…...
Flask-1
文章目录 Flask准备创建flask项目flask加载项目配置的二种方式 路由的基本定义接收任意路由参数接收限定类型参数自定义路由参数转换器 终端运行Flask项目http的请求与响应flask的生命周期请求获取请求中各项数据获取请求URL参数获取请求体获取请求头相关信息 响应响应html文本…...
pve 直通硬盘
qm set <vm_id> –<disk_type>[n] /dev/disk/by-id/- b r a n d − brand- brand−model_$serial_number <vm_id> : 为创建虚拟机时指定的VM ID。 <disk_type>[n]: 导入后的磁盘的总线类型及其编号,总线类型可以选择IDE、SATA…...
NLP_情感分类_机器学习(w2v)方案
文章目录 项目背景数据清洗导包导入数据切分评论及标签Word2Vec构造w2v 数据切分模型训练查看结果 同类型项目 项目背景 项目的目的,是为了对情感评论数据集进行预测打标。在训练之前,需要对数据进行数据清洗环节,前面已对数据进行清洗&…...
240929-CGAN条件生成对抗网络
240929-CGAN条件生成对抗网络 前面我们学习了GAN(240925-GAN生成对抗网络-CSDN博客)和DCGAN(240929-DCGAN生成漫画头像-CSDN博客),接下来继续来看CGAN(Conditional GAN)条件生成对抗网络。 流…...
springboot第74集:设计模式
解析 核心线程数与CPU核数相同:避免线程过多导致的上下文切换,提高CPU利用率。无界队列:适合任务量大且任务执行时间短的场景,避免因队列满而拒绝任务。 IO密集型任务 场景描述 适用于执行大量IO操作的任务,如文件读写…...
数字化采购管理革新:全过程数字化采购管理平台的架构与实施
摘要:在数字化转型的浪潮中,采购管理正逐步迈向全流程的数字化。本文将详细解析全过程数字化采购管理平台的技术架构和实施策略,探讨如何通过Spring Cloud、Spring Boot2、Mybatis等先进技术和服务框架,实现从供应商管理到采购招投…...
Webpack 特性探讨:CDN、分包、Tree Shaking 与热更新
文章目录 前言包准备CDN 集成代码分包Tree Shaking原理实现条件:解决 treeShaking 无效方案:示例代码: 热更新(HMR) 前言 Webpack 作为现代前端开发中的核心构建工具,提供了丰富的特性来帮助开发者优化和打…...
Robot Operating System——一组三维空间中的位姿(位置和方向)
大纲 应用场景1. 机器人导航场景描述具体应用 2. 运动规划场景描述具体应用 3. 物体识别和跟踪场景描述具体应用 4. 环境建模场景描述具体应用 5. 仿真环境场景描述具体应用 定义字段解释 案例 geometry_msgs::msg::PoseArray 是 ROS 2 中的一个消息类型,用于表示一…...
mycat读写分离中间件
5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…...
Growthly Quest 增长工具:助力 Web3 项目实现数据驱动的增长
作者:Stella L (stellafootprint.network) 在瞬息万变的 Web3 领域,众多项目在用户吸引、参与和留存方面遭遇重重难关。Footprint Analytics 推出 Growthly,作为应对这些挑战的全方位解决方案,其中创新性的 Quest(任务…...
Pytorch 学习手册
零 相关资料 官方网址 官方网址下的API搜索网站 一 定义 深度学习框架是用于设计、训练和部署深度学习模型的软件工具包。这些框架提供了一系列预定义的组件,如神经网络层(卷积层、全连接层等)、损失函数、优化器以及数据处理工具…...
第十一章 【前端】调用接口(11.1)——Vite 环境变量
第十一章 【前端】调用接口 11.1 Vite 环境变量 参考:https://cn.vitejs.dev/guide/env-and-mode.html Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。为了防止意外地将一些环境变量泄漏到客户端,只有以 VITE_ 为前缀的变量才会暴露给经过 …...
MySQL添加时间戳字段并且判断插入或更新时间
文章目录 步骤 1: 修改表结构步骤 2: 插入或更新数据步骤 3: 查询数据并判断时间完整示例 在MySQL中,可以在表中添加一个时间戳字段来记录每条数据的最后插入或更新时间。然后,在插入或更新数据时,自动更新这个时间戳字段。最后,在…...
SOA(面相服务架构)
目录 SOA的基本概念 SOA的关键特性 SOA的实现步骤 SOA的技术实现 SOA的应用场景 面向服务的架构(Service-Oriented Architecture, SOA)是一种软件设计理念和架构模式,旨在通过网络协议将不同的服务相互连接和集成,以构建灵活、可扩展和可重用的应用系统。SOA的…...
One2many(一对多)关联场景中,如何从模型(一)关联到模型(多)的某个字段
好的,我们用一个更通俗的例子来解释不同模块之间的模型关联,场景是“学校和学生”的例子。 1. 场景介绍 假设我们有两个模块: 学校模块 (school):用于管理学校信息。学生模块 (student):用于管理学生信息。 每个学…...
LLaMA 3 和 OpenAI有哪些相同点和不同点?
LLaMA 3(Meta 的 LLaMA 系列)和 OpenAI 的模型(如 GPT 系列)都是先进的 大语言模型(LLMs),它们在训练、应用场景和能力上有很多相似之处,但也存在显著的不同点。以下是一些关键相同点…...
Spring 事务管理及失效总结
所谓事务管理,其实就是“按照给定的事务规则来执行提交或者回滚操作”。 Spring 并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给 Hibernate 或者 JTA 等持久化机制所提供的相关平台框架的事务来实现。 Spring 事务…...
全局思维下的联合创新:华为携手ISV伙伴助推银行核心平稳升级
文 | 螳螂观察 作者 | 李永华 随着数字金融快速发展,对核心系统提出了“海量、高效、弹性、扩展、敏捷”等新需求,区域性银行面临核心系统升级的迫切需要,对金融科技厂商而言也催生了庞大的机遇和空间。 只是,银行核心系统是金…...
深度估计任务中的有监督和无监督训练
在计算机视觉领域,深度估计任务一直是研究的热点之一。它旨在通过图像或视频数据来推断场景中物体与相机之间的距离,为许多应用提供关键信息,如自动驾驶、机器人导航、增强现实等。在深度估计任务中,有监督训练和无监督训练是两种…...
扩散模型DDPM代码实践
安装diffusers pip install diffusers 按照diffusers官方代码 from diffusers import DDPMPipelinepipe DDPMPipeline.from_pretrained("google/ddpm-cat-256")image pipe().images[0]image.save("/data/zhz/projects/diffusion/output/ddpm_generated_imag…...
关于GPIO输入模式的配置选择
GPIO(通用输入输出)口是嵌入式系统中的重要组成部分,输入模式使得微控制器能够与外部世界进行交互。本文将探讨GPIO输入模式中的浮空输入、上拉输入和下拉输入的配置、使用场景及注意事项,并提供一些决策指导,帮助读者…...
【Kubernetes】日志平台EFK+Logstash+Kafka【实战】
一,环境准备 (1)下载镜像包(共3个): elasticsearch-7-12-1.tar.gz fluentd-containerd.tar.gz kibana-7-12-1.tar.gz (2)在node节点导入镜像: ctr -nk8s.io images i…...
今天推荐一个文档管理系统 Dorisoy.Pan
Dorisoy.Pan 是一个基于 .NET 8 和 WebAPI 构建的文档管理系统,它集成了 Autofac、MediatR、JWT、EF Core、MySQL 8.0 和 SQL Server 等技术,以实现一个简单、高性能、稳定且安全的解决方案。 这个系统支持多种客户端,包括网站、Android、iO…...
【RocketMQ】消费失败重试与死信消息
🎯 导读:本文档详细介绍了RocketMQ中的重试机制与死信消息处理方法。对于生产者而言,文档提供了如何配置重试次数的具体示例;而对于消费者,它解释了默认情况下消息消费失败后的重试策略,并展示了如何通过代…...
注册安全分析报告:闪送
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
忻州集团网站建设/成都进入搜索热度前五
什么是HTTP: HTTP(HyperText Transfer Protocol超文本传输协议)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准,为了提供一种发布和接收HTML页面的方法。HTTP定义了信息如何被格式化、如何被传输,以及在各种命令下服务器和浏览…...
如需手机网站建设/网站的营销推广方案
#服务器重启故障、服务器异常死机故障。#温度过高 会自动关机#CPU内存负载过大会宕机或者重启 1、chkconfig acpid offservice acpid stop 2、vi /boot/grub/grub.conf在kernel一行最后加上acpioff noacip#kernel... acpioff noacip 3、reboot转载于:https://blog.51cto.com/ki…...
永州高端网站建设/酒店seo是什么意思
1、作用 权重分析是通过熵权法对问卷调查的指标的重要性进行权重输出,根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响&a…...
杭州外贸网站建设公司排名/企业推广app
堆是什么? 是土堆吗? 那当然不是啦~ 堆是一种被看作完全二叉树的数组。 那么什么是完全二叉树呢? 如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。 堆的特…...
邢台网约车平台有哪些/百度搜索引擎优化公司哪家强
转载:http://www.cnblogs.com/CCGGAAG/p/7800323.html 上篇,我们说了如何配置基础的环境,配置好了python2、wxPython 、robot framework、robot framework-ride,这篇我们来根据已经配置好的环境来简单介绍一下RF(Robot…...
j2ee网站开发/网站推广四个阶段
第一种 1、windows下进入CMD启动2、在命令行中输入Tomcat安装的磁盘:E:3、进入Tomcat的主安装目录:cd Tomcat4、进入bin文件夹:cd bin5、查看该文件夹下边的文件目录:dir6、启动startup.bat 命令行中输入:startup.ba…...