Tomcat - 源码构建Tomcat 8.5.55 启动

2021-08-17 11:38:13 浏览数 (1)


官方地址

https://tomcat.apache.org/download-80.cgi

历史版本:

https://archive.apache.org/dist/tomcat/tomcat-8/

这里最新的是 8.5.55 ,我们就用这个吧

得到 apache-tomcat-8.5.55-src.zip


源码搭建分析

我们在使用tomcat时,俩目录 conf 和 webapps 是不是经常需要修改?

一个负责tomcat的配置文件信息,一个负责应用 。 很显然,我们使用源码构建tomcat环境的时候,也要告诉tomcat这两个目录的位置,以便加载配置文件和应用。

不管形式怎么变, 使用tomcat编译好的二进制还是源码部署编译,tomcat该加载的配置文件都是一样的。

因此 ,使用源码编译需要做出点改变, 比如下面搭建步骤中新建source文件夹目录,存放conf和webapps(实际上,这个目录名字爱叫啥,爱放哪 放哪, 我们只要通过VM options 告诉tomcat就好了,为了方便管理,所以在源码的一级目录下建个目录source


源码搭建步骤 (Maven管理)

Step1. 新增maven管理文件 pom.xml

解压apache-tomcat-8.5.55-src.zip 后 ,比如我这里放到了D盘 , 在 D:apache-tomcat-8.5.55-src 下 新建pom.xml

代码语言:javascript复制
<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>8source>
                    <target>8target>
                configuration>
            plugin>
        plugins>
    build>

    
    <dependencies>
        
        <dependency>
            <groupId>javax.xmlgroupId>
            <artifactId>jaxrpcartifactId>
            <version>1.1version>
        dependency>
        
        <dependency>
            <groupId>javax.xml.soapgroupId>
            <artifactId>javax.xml.soap-apiartifactId>
            <version>1.4.0version>
        dependency>
        
        <dependency>
            <groupId>wsdl4jgroupId>
            <artifactId>wsdl4jartifactId>
            <version>1.6.2version>
        dependency>
        
        <dependency>
            <groupId>org.eclipse.jdt.core.compilergroupId>
            <artifactId>ecjartifactId>
            <version>4.5.1version>
        dependency>
        
        <dependency>
            <groupId>antgroupId>
            <artifactId>antartifactId>
            <version>1.7.0version>
        dependency>
        
        <dependency>
            <groupId>org.easymockgroupId>
            <artifactId>easymockartifactId>
            <version>3.4version>
        dependency>
    dependencies>
project>

Step2. 处理conf 和 webapps

在 D:apache-tomcat-8.5.55-src 下新建个source目录 ,原因如上分析

在apache-tomcat-8.5.55-src下创建source文件夹 ,将conf、webapps目录移动到 source文件夹中

这里多了其他的,是因为我刚才已经启动tomcat了…


Step3. 导入IEDA

3.1 配置Main Class

新增Application , 选择Main class , 配置VM 参数

3.2 配置VM 参数

VM参数 ,告诉tomcat 家目录一级 log日志文件目录。 【tomcat源码运行需要加载配置文件】

代码语言:javascript复制
-Dcatalina.home=D:apache-tomcat-8.5.55-srcsource
-Dcatalina.base=D:apache-tomcat-8.5.55-srcsource
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:apache-tomcat-8.5.55-srcsourceconflogging.properties

完整的信息如下:


Step4. 启动tomcat

访问 http://locahost:8080/

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

代码语言:javascript复制
  // 初始化Jasper  (JSP解析引擎)
  context.addServletContainerInitializer(new JasperInitializer(),null);

重启再次访问 http://locahost:8080/

0 人点赞