一、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相干的依赖
    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>
    复制代码

  2. 导入工程到idea

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

  1. 配置主函数启动类 ,并配置 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
复制代码

  1. 启动Tomcat 源码主办法, 运行拜访