Tomcat 源码启动

要想学习 Tomcat 原理,看源码是最直接的方式,而想要理解源码,我们要想把它在本地跑起来。

下载源码

到 Tomcat 的官网 http://tomcat.apache.org 上下载 Tomcat 的源码
Tomcat 源码启动_第1张图片

下载下来是一个压缩包文件
在这里插入图片描述

解压之后目录结构如下
Tomcat 源码启动_第2张图片

用IDEA打开

在根目录用 IDEA 打开,Tomcat 是用 Ant 构建的,所以我们要把它改成 Maven 项目。用 Idea 打开之后如下,在根目录下创建 pom.xml 文件。

Tomcat 源码启动_第3张图片

pom.xml 文件如下:


<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.0modelVersion>
  <groupId>org.apachegroupId>
  <artifactId>tomcatartifactId>
  <name>apache-tomcat-8.5.57name>
  <version>8.5.57version>

  <build>
    <finalName>Tomcat-8.5.57finalName>
    <sourceDirectory>javasourceDirectory>
    <testSourceDirectory>testtestSourceDirectory>
    <resources>
      <resource>
        <directory>javadirectory>
      resource>
    resources>
    <testResources>
      <testResource>
        <directory>testdirectory>
      testResource>
    testResources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-compiler-pluginartifactId>
        <version>3.5.1version>
        <configuration>
          <encoding>UTF-8encoding>
          <source>1.8source>
          <target>1.8target>
        configuration>
      plugin>
    plugins>
  build>

  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.12version>
      <scope>testscope>
    dependency>
    <dependency>
      <groupId>org.easymockgroupId>
      <artifactId>easymockartifactId>
      <version>3.4version>
      <scope>testscope>
    dependency>

    <dependency>
      <groupId>org.apache.antgroupId>
      <artifactId>antartifactId>
      <version>1.10.0version>
    dependency>
    <dependency>
      <groupId>wsdl4jgroupId>
      <artifactId>wsdl4jartifactId>
      <version>1.6.2version>
    dependency>
    <dependency>
      <groupId>javax.xmlgroupId>
      <artifactId>jaxrpcartifactId>
      <version>1.1version>
    dependency>
    <dependency>
      <groupId>org.eclipse.jdt.core.compilergroupId>
      <artifactId>ecjartifactId>
      <version>4.6.1version>
    dependency>
    
    <dependency>
      <groupId>org.glassfishgroupId>
      <artifactId>javax.xml.rpcartifactId>
      <version>3.0.1-b03version>
    dependency>

    <dependency>
      <groupId>com.unboundidgroupId>
      <artifactId>unboundid-ldapsdkartifactId>
      <version>6.0.3version>
    dependency>

  dependencies>
project>

标记项目的源码目录和测试源码目录

Tomcat 源码启动_第4张图片

这是项目就已经被我们改造成 Maven 项目了,点击刷新图标就会下载所有的依赖项

Tomcat 源码启动_第5张图片

配置并启动

idea项目的启动配置

Tomcat 源码启动_第6张图片

  • Tomcat 的启动类是:org.apache.catalina.startup.Bootstrap

  • 配置虚拟机参数:

    -Dcatalina.home=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src
    -Dcatalina.base=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src
    -Djava.endorsed.dirs=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src\endorsed
    -Djava.io.tmpdir=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src\temp
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src\conf\logging.properties
    -Duser.language=en
    -Duser.region=US
    

    注意,里面的目录是你解压缩 Tomcat 源码包的目录,如果你的目录不一样需求修改。

  • org.apache.catalina.startup.ContextConfig.java 中的 webConfig(); 后面加上一段代码 context.addServletContainerInitializer(new JasperInitializer(),null);,它的作用是加载 org.apache.jasper.servlet.JasperInitializer,如果不加这段代码,Tomcat 的欢迎页面会报错。

然后就可以启动 Tomcat 了,Tomcat 的默认端口号是 8080。启动后输出日志如下:
Tomcat 源码启动_第7张图片

启动成功后在本地使用浏览器访问 http://localhost:8080 访问 Tomcat
Tomcat 源码启动_第8张图片

参考:
https://juejin.cn/post/6872515297618706446
https://www.cnblogs.com/wk-missQ1/p/13138720.html

你可能感兴趣的:(servlet,java,web,tomcat,java)