百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Tomcat原理剖析-tomcat介绍和源码idea构建

csdh11 2025-03-29 16:36 8 浏览

一、Tomcat 介绍

1.1 什么是Tomcat

Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。

几乎所有Java程序员初期都会使用它,今天我们就带着大家深入Tomcat底层原理。

除了tomcat服务器,我们还可以使用其他的web服务器,那常见还还有以下这些:

Undertow:是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。

JBoss:JBoss公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

WebLogic:Oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

WebSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

历史沿革

Tomcat 最初由Sun公司的软件架构师 James Duncan Davidson 开发,名称为 “JavaWebServer”。

1999年,在 Davidson 的帮助下,该项目于 1999 年于apache 软件基金会旗下的 JServ 项目合并,

并发布第一个版本(3.x), 即是现在的Tomcat,该版本实现了Servlet2.2 和 JSP 1.1 规范 。

2001年,发布4.0版本,作为里程碑式的版本,Tomcat 完全重新设计了其架构,并实现了 Servlet

2.3 和 JSP1.2规范。

2003年,发布5.0版本,实现 Servlet 2.4 和 JSP2.0规范。

2007年,发布6.0版本,实现 Servlet 2.5 、JSP2.1 规范。支持EL1.1规范。

2011年,发布7.0版本,实现 Servlet 3.0 和 JSP2.2规范。支持EL2.2规范。加入了WebSocket规

范。

2014年,发布8.0版本,实现 Servlet 3.1 和 JSP2.3规范。支持EL3.0规范。

2016年,发布8.5版本,实现 Servlet 3.1 和 JSP2.3规范。支持HTTP/2,OpenSSL,TLS虚拟主机

和JASPIC1.1。

2018年,发布9.0版本,实现 Servlet 4.0 规范。

目前 Tomcat 已经更新到 10.0.x版本 , 但是目前企业中的Tomcat服务器, 主流版本是8.5 , 所以

本课程是基于 8.5 版本进行讲解。

好吧,这tomcat的发展历史,大家伙稍微看一下即可。

来吧,我们直接去tomcat官网下载一个tomcat服务器吧:下载地址

  • 点击下载即可。
  • 启动(解压下载下来的zip压缩包)
  • window下,直接双击startup.bat启动
  • bin/startup.bat
  • 复制代码
  • 停止
  • window下,shutdown.bat启动
  • bin/shutdown.bat
  • 复制代码

1.2 目录结构介绍

解压下,我们可以看下以下的目录结构:

对于这些目录结构,我们来做个说明:

目录目录下文件说明bin/存放Tomcat的启动、停止等批处理脚本文件startup.bat, startup.sh用于在windows和linux下的启动脚本shutdown.bat, shutdown.sh用于在windows和linux下的停止脚本conf/用于存放Tomcat的相关配置文件Catalina用于存储针对每个虚拟机的Context配置context.xml用于定义所有web应用均需加载的Context配置。

如果web应用指定了自己的context.xml ,该文件将被覆盖catalina.propertiesTomcat 的环境变量配置catalina.policyTomcat 运行的安全策略配置logging.propertiesTomcat 的日志配置文件, 可以通过该文件修改Tomcat 的日志级别及日志路径等server.xmlTomcat 服务器的核心配置文件tomcat-users.xml定义Tomcat默认的用户及角色映射信息配置web.xmlTomcat 中所有应用默认的部署描述文件,^ 主要定义了基础Servlet和MIME映射。lib/Tomcat 服务器的依赖包logs/Tomcat 默认的日志存放目录webapps/Tomcat 默认的Web应用部署目录work/Web 应用JSP代码生成和编译的临时目录

好了,以上就是tomcat的目录结构说明了。

那我们今天的主要是对tomcat的源码进行构建,这里我们使用idea工具进行tomcat源码构建。

1.3 Tomcat源码学习环境搭建

这里我们先下载好tomcat的源码,tomcat版本:8.5.81

1、源码下载

下载地址

2、源码idea工程搭建

搭建步骤:

  1. 解压源码zip压缩包

  1. 进入解压目录,并创建文件夹,命名为home 。 并将conf、webapps目录移入home 目录中

3.这里还需拷贝lib目录,到home文件夹里面

这里的lib目录,可以用上面我们下载好的tomcat服务器的lib文件夹

  1. 在当前目录下创建一个 pom.xml 文件,引入tomcat相关的依赖
  2. pom.xml
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. 4.0.0
  6. org.apache.tomcat
  7. apache-tomcat-8.5.81-src
  8. Tomcat8.5
  9. 8.5
  10. Tomcat8.5
  11. java
  12. <directory>java</directory>
  13. <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <encoding>UTF-8</encoding> <source>1.8</source> <target>1.8</target> </configuration>
  14. junit
  15. junit
  16. 4.12
  17. test
  18. org.easymock
  19. easymock
  20. 3.4
  21. ant
  22. ant
  23. 1.7.0
  24. wsdl4j
  25. wsdl4j
  26. 1.6.2
  27. javax.xml
  28. jaxrpc
  29. 1.1
  30. org.eclipse.jdt.core.compiler
  31. ecj
  32. 4.5.1
  33. 复制代码
  34. 导入工程到idea

导入到idea中,并进行maven构建。

  1. 配置主函数启动类 ,并配置 VM 参数

复制代码

  1. 启动Tomcat 源码主方法, 运行访问

相关推荐

NUS邵林团队发布DexSinGrasp基于强化学习实现物体分离与抓取统一

本文的作者均来自新加坡国立大学LinSLab。本文的共同第一作者为新加坡国立大学实习生许立昕和博士生刘子轩,主要研究方向为机器人学习和灵巧操纵,其余作者分别为硕士生桂哲玮、实习生郭京翔、江泽宇以及...

「PLC进阶」如何通过编写SCL语言程序实现物料分拣?

01、前言SCL作为IEC61131-3编程语言的一种,由于其高级语言的特性,特别适合复杂运算、复杂数学函数应用的场合。本文以FactoryIO软件中的物料分拣案例作为硬件基础,介绍如何通过SCL来实...

zk源码—5.请求的处理过程一(http1.1请求方法)

大纲1.服务器的请求处理链...

自己动手从0开始实现一个分布式 RPC 框架

前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异...

MLSys’25 | 极低内存消耗:用SGD的内存成本实现AdamW的优化性能

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,...

线程池误用导致系统假死(线程池会自动销毁吗)

背景介绍在项目中,为了提高系统性能使用了RxJava实现异步方案,其中异步线程池是自建的。但是当QPS稍微增大之后却发现系统假死、无响应和返回,调用方出现大量超时现象。但是通过监控发现,系统线程数正常...

大型乘用车工厂布局规划(六大乘用车基地)

乘用车工厂的布局规划直接影响生产效率、物流成本、安全性和未来扩展能力。合理的布局应确保生产流程顺畅、物流高效、资源优化,并符合现代化智能制造和绿色工厂的要求。以下是详细的工厂布局规划要点:1.工厂布...

西门子 S7-200 SMART PLC 连接Factory IO的方法

有很多同学不清楚如何西门子200smart如何连接FactoryIO,本教程为您提供了如何使用西门子S7-200SMARTPLC连接FactoryIO的说明。设置PC和PLC之间的...

西门子博图高级仿真软件的应用(西门子博途软件仿真)

1.博图高级仿真软件(S7-PLCSIMAdvancedV2.0)S7-PLCSIMAdvancedV2.0包含大量仿真功能,通过创建虚拟控制器对S7-1500和ET200SP控制器进行仿真...

PLC编程必踩的6大坑——请对号入座,评论区见

一、缺乏整体规划:面条式代码问题实例:某快递分拣线项目初期未做流程图设计,工程师直接开始编写传送带控制程序。后期增加质检模块时发现I/O地址冲突,电机启停逻辑与传感器信号出现3处死循环,导致项目延期2...

统信UOS无需开发者模式安装软件包
统信UOS无需开发者模式安装软件包

原文链接:统信UOS无需开发者模式安装软件包...

2025-05-05 14:55 csdh11

100个Java工具类之76:数据指纹DigestUtils

为了提高数据安全性,保证数据的完整性和真实性,DigestUtils应运而生。正确恰当地使用DigestUtils的加密算法,可以实现数据的脱敏,防止数据泄露或篡改。...

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

#秋日生活打卡季#原文链接:...

Java常用工具类技术文档(java中工具类的作用)

一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...

软路由的用法(自动追剧配置)(软路由教学)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:值友98958248861环境和需求...