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主要用于客户端与服务器端之间的身份认证和数据传输加密。

 

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

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

相关文章

JAVA开源项目 新闻推荐系统 计算机毕业设计

本文项目编号 T 056 ,文末自助获取源码 \color{red}{T056,文末自助获取源码} T056,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

【HTML5】html5开篇基础(5)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

elementUI表格中某个字段(state)使用计算属性进行转换为对应中文显示

代码案例&#xff1a; <template><el-table:data"tableData"style"width: 100%"><el-table-columnprop"date"label"日期"width"180"/><el-table-columnprop"name"label"姓名"wid…

通信工程师笔记

第一章 1.支撑网是使业务网正常运行,增强网络功能,提供全网服务质量以满足用户要求的网络。 2.常见的有线通信线路包括&#xff08;1&#xff09;双绞线&#xff0c;&#xff08;2&#xff09;同轴电缆&#xff0c;&#xff08;3&#xff09;光纤等&#xff0c;无线通信线路是…

哈希-01-数据分类处理

文章目录 1. 题目描述2. 思路3. 代码 1. 题目描述 信息社会&#xff0c;有海量的数据需要分析处理&#xff0c;比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。 采集输入大数据和分类规则&#xff0c;通过大数据分类处理程序&#xff0c;将大数据…

【Preference Learning】Reasoning with Language Model is Planning with World Model

arxiv: https://arxiv.org/abs/2305.14992 问题背景&#xff1a;当前LLM推理受到几个关键因素的限制&#xff1a; &#xff08;1&#xff09;LLM缺乏世界模型&#xff08;一种人类就有的对环境的心理表征&#xff0c;可以模拟行动以及活动对外部世界状态的影响&#xff09;去…

TVS/ESD管应用问题点

TVS管全称是Transient Voltage Suppressor&#xff0c; 即瞬态抑制器二极管&#xff0c; 其主要为硅材料&#xff0c; 是 二极管的一种引申工艺器件。 根据其应用的定义&#xff0c; 更多为涉及浪涌等大功率方面的测试&#xff0c; 因 此TVS管主要指SMAJ、 SMBJ及其以上封装&a…

9.29学习

1.线上问题rebalance 因集群架构变动导致的消费组内重平衡&#xff0c;如果kafka集内节点较多&#xff0c;比如数百个&#xff0c;那重平衡可能会耗时导致数分钟到数小时&#xff0c;此时kafka基本处于不可用状态&#xff0c;对kafka的TPS影响极大 产生的原因 ①组成员数量发…

数据库软题1-数据模型+数据库三级模式两级映像

一、数据模型 (一)常见的数据模型 题1-二维表-关系模型 二、三级模式两级映像 (一) 外模式/模式/内模式 <>视图/基本表/文件 题1-三级模式与数据库的三对应 题2-三级模式与数据库的三对应 题3-视图是虚拟表 解析&#xff1a;视图是从一个或几个基本表&#xff08;或视…

ZYNQ中 PL 使用 PS 端晶振实现流水灯

ZYNQ中 PL 使用 PS 端晶振实现流水灯 Create Block Design 点击 Create Block Design, 然后点击 OK: 添加 IP 核 点击 Diagram 中的 号: 在 IP 核的搜索框中输入 ZYNQ, 找到 ZYNQ7 Processing System 的 IP 核,双击之: Viavado 会把 ZYNQ 的 IP 加到我们的 Block Design 中…

企业如何提升知识产权管理效率?

随着企业规模的扩大和创新活动的增加&#xff0c;知识产权管理日益复杂。有效的知识产权管理不仅能够保护企业的创新成果&#xff0c;还能为企业带来巨大的商业价值。然而&#xff0c;许多企业在知识产权管理方面面临着效率低下的问题&#xff0c;管理效率的提升成为企业亟需解…

交换机支持的以太网协议大全

在现代网络架构中,以太网协议是基础设施的核心组成部分,而交换机作为以太网网络的关键设备,其支持的协议种类繁多。理解这些协议的功能和应用场景对于网络管理员和工程师而言至关重要,因为这些协议决定了网络的性能、稳定性和安全性。 以太网协议的发展经历了从最初的10Mb…

使用apipost工具导入通过swag生成的golang接口文档步骤

1.通过swag init 生成docs接口文档 见使用swag init --parseDependency生成api文档报错解决办法 2.导入操作 ok,操作完成

NB_IOT类产品的通信功能生产测试方案

01 物联网行业中存在的问题 在产品的生产流程中&#xff0c;NB 产品的 Socket 通信测试是一个至关重要的环节。Socket 通信作为一种常用的网络通信方式&#xff0c;对于 NB 产品的性能和稳定性有着直接的影响。 在这个阶段&#xff0c;测试人员会精心设计一系列的测试用例&a…

基于OpenCV的实时年龄与性别识别(支持CPU和GPU)

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

NineData云原生智能数据管理平台新功能发布|2024年9月版

本月发布 3 项更新&#xff0c;其中重点发布 3 项。 重点发布 数据复制 - 新增 Oracle 到 Kafka 复制链路 数据复制功能新增支持将 Oracle 中的数据复制到 Kafka&#xff0c;实现数据的实时流转和分发&#xff0c;支持全量和增量。 数据复制 - 新增库表分组复制 创建复制任务…

网上很好看的动态音频效果是怎么做的?只需两个步骤实现动态音乐效果!

网上很好看的动态音频效果是怎么做的&#xff1f;只需两个步骤实现动态音乐效果&#xff01;大家听音乐的时候&#xff0c;有没看到别人桌面上会有一些音频效果&#xff0c;随着音乐的节奏而跳动。 其实这是用了一些桌面插件&#xff0c;来显示音频效果&#xff0c;咱们这期就…

【小程序】微信小程序课程 -4 项目实战

目录 1、 效果图 2、创建项目 2.1 创建小程序端 2.1.1 先创建纯净项目 2.1.2 删除components 2.1.4 删除app.json红色部分 2.1.5 删除index.json红色部分 2.1.6 删除index.wxss全部内容 2.1.7 删除index.wxml全部内容 2.1.8 app.json创建4个页面 2.1.9 app.json添加…