当前位置: 首页 > news >正文

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]&#xff1a; 导入后的磁盘的总线类型及其编号&#xff0c;总线类型可以选择IDE、SATA…...

NLP_情感分类_机器学习(w2v)方案

文章目录 项目背景数据清洗导包导入数据切分评论及标签Word2Vec构造w2v 数据切分模型训练查看结果 同类型项目 项目背景 项目的目的&#xff0c;是为了对情感评论数据集进行预测打标。在训练之前&#xff0c;需要对数据进行数据清洗环节&#xff0c;前面已对数据进行清洗&…...

240929-CGAN条件生成对抗网络

240929-CGAN条件生成对抗网络 前面我们学习了GAN&#xff08;240925-GAN生成对抗网络-CSDN博客&#xff09;和DCGAN&#xff08;240929-DCGAN生成漫画头像-CSDN博客&#xff09;&#xff0c;接下来继续来看CGAN&#xff08;Conditional GAN&#xff09;条件生成对抗网络。 流…...

springboot第74集:设计模式

解析 核心线程数与CPU核数相同&#xff1a;避免线程过多导致的上下文切换&#xff0c;提高CPU利用率。无界队列&#xff1a;适合任务量大且任务执行时间短的场景&#xff0c;避免因队列满而拒绝任务。 IO密集型任务 场景描述 适用于执行大量IO操作的任务&#xff0c;如文件读写…...

数字化采购管理革新:全过程数字化采购管理平台的架构与实施

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;采购管理正逐步迈向全流程的数字化。本文将详细解析全过程数字化采购管理平台的技术架构和实施策略&#xff0c;探讨如何通过Spring Cloud、Spring Boot2、Mybatis等先进技术和服务框架&#xff0c;实现从供应商管理到采购招投…...

Webpack 特性探讨:CDN、分包、Tree Shaking 与热更新

文章目录 前言包准备CDN 集成代码分包Tree Shaking原理实现条件&#xff1a;解决 treeShaking 无效方案&#xff1a;示例代码&#xff1a; 热更新&#xff08;HMR&#xff09; 前言 Webpack 作为现代前端开发中的核心构建工具&#xff0c;提供了丰富的特性来帮助开发者优化和打…...

Robot Operating System——一组三维空间中的位姿(位置和方向)

大纲 应用场景1. 机器人导航场景描述具体应用 2. 运动规划场景描述具体应用 3. 物体识别和跟踪场景描述具体应用 4. 环境建模场景描述具体应用 5. 仿真环境场景描述具体应用 定义字段解释 案例 geometry_msgs::msg::PoseArray 是 ROS 2 中的一个消息类型&#xff0c;用于表示一…...

mycat读写分离中间件

5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下&#xff0c;并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…...

Growthly Quest 增长工具:助力 Web3 项目实现数据驱动的增长

作者&#xff1a;Stella L (stellafootprint.network) 在瞬息万变的 Web3 领域&#xff0c;众多项目在用户吸引、参与和留存方面遭遇重重难关。Footprint Analytics 推出 Growthly&#xff0c;作为应对这些挑战的全方位解决方案&#xff0c;其中创新性的 Quest&#xff08;任务…...

Pytorch 学习手册

零 相关资料 官方网址 官方网址下的API搜索网站 一 定义 深度学习框架是用于设计、训练和部署深度学习模型的软件工具包。这些框架提供了一系列预定义的组件&#xff0c;如神经网络层&#xff08;卷积层、全连接层等&#xff09;、损失函数、优化器以及数据处理工具&#xf…...

第十一章 【前端】调用接口(11.1)——Vite 环境变量

第十一章 【前端】调用接口 11.1 Vite 环境变量 参考&#xff1a;https://cn.vitejs.dev/guide/env-and-mode.html Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。为了防止意外地将一些环境变量泄漏到客户端&#xff0c;只有以 VITE_ 为前缀的变量才会暴露给经过 …...

MySQL添加时间戳字段并且判断插入或更新时间

文章目录 步骤 1: 修改表结构步骤 2: 插入或更新数据步骤 3: 查询数据并判断时间完整示例 在MySQL中&#xff0c;可以在表中添加一个时间戳字段来记录每条数据的最后插入或更新时间。然后&#xff0c;在插入或更新数据时&#xff0c;自动更新这个时间戳字段。最后&#xff0c;在…...

SOA(面相服务架构)

目录 SOA的基本概念 SOA的关键特性 SOA的实现步骤 SOA的技术实现 SOA的应用场景 面向服务的架构(Service-Oriented Architecture, SOA)是一种软件设计理念和架构模式,旨在通过网络协议将不同的服务相互连接和集成,以构建灵活、可扩展和可重用的应用系统。SOA的…...

One2many(一对多)关联场景中,如何从模型(一)关联到模型(多)的某个字段

好的&#xff0c;我们用一个更通俗的例子来解释不同模块之间的模型关联&#xff0c;场景是“学校和学生”的例子。 1. 场景介绍 假设我们有两个模块&#xff1a; 学校模块 (school)&#xff1a;用于管理学校信息。学生模块 (student)&#xff1a;用于管理学生信息。 每个学…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...