Idea编译tomcat8源码

Idea编译tomcat8源码

参考博客地址:

  1. 参考地址1
  2. 参考地址2
  3. 参考地址3

下载源码

  1. 下载地址:官网下载地址
    在这里插入图片描述

配置

  1. 解压源码
    我是解压到:D:\work\project\learn\ 下apache-tomcat-8.5.38-src

  2. apache-tomcat-8.5.38-src目录下添加pom文件

     <?xml version="1.0" encoding="UTF-8"?>
    

     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.tomcat</groupId>
     <artifactId>Tomcat8.0</artifactId>
     <name>Tomcat8.0</name>
     <version>8.0</version>
    
     <build>
         <finalName>Tomcat8.0</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</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>
    
  3. 在apache-tomcat-8.5.38-src 同级目录新建 catalina-home并保证目录下面文件如下
    在这里插入图片描述
    注意: 上面文件夹 apache-tomcat-8.5.38-src里面有的,就剪切过来,没有的就新建一个 bin conf webapps 应该是从apache-tomcat-8.5.38-src剪切过来的

  4. idea引入项目
    File->Open 选择解压的D:\work\project\learn\ apache-tomcat-8.5.38-src
    在这里插入图片描述

  5. 导入pom文件
    在这里插入图片描述
    在这里插入图片描述

配置启动

  1. MainClass: org.apache.catalina.startup.Bootstrap
  2. VmOptions: -Dcatalina.home=“D:\work\project\learn\catalina-home”
    在这里插入图片描述
    点击启动按钮

启动报错

  1. TestCookieFilter 报错找不到这个类CookieFilter
    解决方法:
    1. 删除:TestCookieFilter
    2. 在test/util下面添加 CookieFilter

    /*
     * Licensed to the Apache Software Foundation (ASF) under one or more
     * contributor license agreements.  See the NOTICE file distributed with
     * this work for additional information regarding copyright ownership.
     * The ASF licenses this file to You under the Apache License, Version 2.0
     * (the "License"); you may not use this file except in compliance with
     * the License.  You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package util;
    
    import java.util.Locale;
    import java.util.StringTokenizer;
    
    /**
     * Processes a cookie header and attempts to obfuscate any cookie values that
     * represent session IDs from other web applications. Since session cookie names
     * are configurable, as are session ID lengths, this filter is not expected to
     * be 100% effective.
     *
     * It is required that the examples web application is removed in security
     * conscious environments as documented in the Security How-To. This filter is
     * intended to reduce the impact of failing to follow that advice. A failure by
     * this filter to obfuscate a session ID or similar value is not a security
     * vulnerability. In such instances the vulnerability is the failure to remove
     * the examples web application.
     */
    public class CookieFilter {
    
        private static final String OBFUSCATED = "[obfuscated]";
    
        private CookieFilter() {
            // Hide default constructor
        }
    
        public static String filter(String cookieHeader, String sessionId) {
    
            StringBuilder sb = new StringBuilder(cookieHeader.length());
    
            // Cookie name value pairs are ';' separated.
            // Session IDs don't use ; in the value so don't worry about quoted
            // values that contain ;
            StringTokenizer st = new StringTokenizer(cookieHeader, ";");
    
            boolean first = true;
            while (st.hasMoreTokens()) {
                if (first) {
                    first = false;
                } else {
                    sb.append(';');
                }
                sb.append(filterNameValuePair(st.nextToken(), sessionId));
            }
    
    
            return sb.toString();
        }
    
        private static String filterNameValuePair(String input, String sessionId) {
            int i = input.indexOf('=');
            if (i == -1) {
                return input;
            }
            String name = input.substring(0, i);
            String value = input.substring(i + 1, input.length());
    
            return name + "=" + filter(name, value, sessionId);
        }
    
        public static String filter(String cookieName, String cookieValue, String sessionId) {
            if (cookieName.toLowerCase(Locale.ENGLISH).contains("jsessionid") &&
                    (sessionId == null || !cookieValue.contains(sessionId))) {
                cookieValue = OBFUSCATED;
            }
    
            return cookieValue;
        }
    }
    
    
  2. 启动后,访问localhost:8080 报错 org.apache.jasper.JasperException: java.lang.NullPointerException
    解决方案:
    org.apache.catalina.startup.Bootstrap 添加代码块

    
        {
            JasperInitializer initializer =new JasperInitializer();
        }
    

    在这里插入图片描述

访问

  1. 访问 localhost:8080

    在这里插入图片描述

感想

  1. 已经够详细了,亲测可以了
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值