• 源码构建Tomcat 8.5.81启动


    最近面试偶尔遇到问tomcat源码问题,不得不下载源码学习储备一下。个人感觉学习源码的最好方式,就是通过dubug的方式一步一步深入了解代码。本文主要记录了启动tomcat过程,供参考。

    1.下载Tomcat源码

    官网地址:https://tomcat.apache.org/download-80.cgi
    在windows系统下面学习的话,就下载zip包。

    在这里插入图片描述

    2.导入Idea前准备工作

    1、解压zip包,得到apache-tomcat-8.5.81-src目录。
    在这里插入图片描述

    2、添加pom.xml文件
    apache-tomcat-8.5.81-src根目录下创建一个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.apache.tomcatgroupId>
      <artifactId>apache-tomcat-8.5.50-srcartifactId>
      <name>Tomcat8.5name>
      <version>8.5version>
      <build>
        
        <finalName>Tomcat8.5finalName>
        <sourceDirectory>javasourceDirectory>
        <resources>
          <resource>
            <directory>javadirectory>
          resource>
        resources>
        <plugins>
          
          <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-compiler-pluginartifactId>
            <version>3.1version>
            <configuration>
              <encoding>UTF-8encoding>
              <source>11source>
              <target>11target>
            configuration>
          plugin>
        plugins>
      build>
      
      <dependencies>
        <dependency>
          <groupId>org.easymockgroupId>
          <artifactId>easymockartifactId>
          <version>3.4version>
        dependency>
        <dependency>
          <groupId>antgroupId>
          <artifactId>antartifactId>
          <version>1.7.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.5.1version>
        dependency>
        <dependency>
          <groupId>javax.xml.soapgroupId>
          <artifactId>javax.xml.soap-apiartifactId>
          <version>1.4.0version>
        dependency>
      dependencies>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    3、在apache-tomcat-8.5.81-src根目录下面,添加一个source目录,然后将confwebapps两个目录移动到source目录下面。

    实际上source这个目录名字可以是任意的,位置也可以随意的。只需要在配置VM参数的时候指定的这个目录就可以了

    3.导入Idea和配置Application

    3.1 导入项目到Idea

    导入项目到Idea, File->Open,然后打开apache-tomcat-8.5.81-src目录。
    在这里插入图片描述

    3.1 配置Application

    可以通过Run->Edit Configurations打开,配置Application
    在这里插入图片描述

    在这里插入图片描述

    3.2.1 配置VM参数
    -Dcatalina.home=D:\Jackli\myProject\apache-tomcat-8.5.81-src\source
    -Dcatalina.base=D:\Jackli\myProject\apache-tomcat-8.5.81-src\source
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=D:\Jackli\myProject\apache-tomcat-8.5.81-src\source\conf\logging.properties
    -Duser.country=EN
    
    • 1
    • 2
    • 3
    • 4
    • 5
    3.2.1 配置启动类Main Class
    org.apache.catalina.startup.Bootstrap
    
    • 1

    至此配置完成,接下来启动Application,启动完成后访问地址:https://localhost:8080/

    会出现以下报错
    在这里插入图片描述

    原因主要:Jsp引擎Jasper没有被初始化,从而无法编译处理Jsp,Jsp是需要被转换成servlet进一步编译处理的,只需要在tomcat的源码ContextConfig类中的configureStart方法中增加一行代码将Jsp引擎初始化。

     // 初始化Jasper  (JSP解析引擎)
      context.addServletContainerInitializer(new JasperInitializer(),null);
    
    • 1
    • 2

    4.出现问题

    问题1:乱码问题

    启动Application会发现日志出现乱码。
    在这里插入图片描述
    解决:在vm参数中添加启动参数:

    -Duser.country=EN
    
    • 1
    问题2:社区版的idea无vm Options选项

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    web大作业 静态网页(地下城与勇士 10页 带视频)
    OpenCV3.4.12&opencv_contrib编译静态库
    LQ0190 李白打酒【填空题】
    基于GAN的自动提取混凝土损伤特征方法
    软件测试/测试开发丨跨平台 api 对接 学习笔记
    浅析Python 实现一个自动化翻译和替换的工具
    掌握互联网的未来:5G时代的新机遇
    java 开发框架 Redis 之 sentinel 和集群
    redis集群系列二
    一不小心酿成错,做到4点,少上厕所多睡觉,孕期“尿频”别大意
  • 原文地址:https://blog.csdn.net/lili13897741554/article/details/125868178