一、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 工程搭建
搭建步骤:
- 解压源码 zip 压缩包
- 进入解压目录,并创立文件夹,命名为 home。并将 conf、webapps 目录移入 home 目录中
3. 这里还需拷贝 lib 目录,到 home 文件夹外面
这里的 lib 目录,能够用下面咱们下载好的 tomcat 服务器的 lib 文件夹
-
在当前目录下创立一个 pom.xml 文件,引入 tomcat 相干的依赖
pom.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.tomcat</groupId>
<artifactId>apache-tomcat-8.5.81-src</artifactId>
<name>Tomcat8.5</name>
<version>8.5</version>
<build>
<finalName>Tomcat8.5</finalName>
<sourceDirectory>java</sourceDirectory>
<!– <testSourceDirectory>test</testSourceDirectory>–>
<resources>
<resource><directory>java</directory>
</resource>
</resources>
<!–<testResources>–>
<!– <testResource>–>
<!– <directory>test</directory>–>
<!– </testResource>–>
<!–</testResources>–>
<plugins>
<plugin><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>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.5.1</version>
</dependency>
</dependencies>
</project>
复制代码 - 导入工程到 idea
导入到 idea 中,并进行 maven 构建。
- 配置主函数启动类,并配置 VM 参数
这里的 vm 参数,贴一下喽:
-Dcatalina.home=D:/mywork/tomcat/apache-tomcat-8.5.81-src/home
-Dcatalina.base=D:/mywork/tomcat/apache-tomcat-8.5.81-src/home
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:/mywork/tomcat/apache-tomcat-8.5.81-src/home/conf/logging.properties
复制代码
- 启动 Tomcat 源码主办法,运行拜访