乐趣区

关于tomcat:Tomcat原理剖析tomcat介绍和源码idea构建

一、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 源码主办法,运行拜访
退出移动版