Idea编译tomcat8源码

Idea编译tomcat8源码

目录:

  • Idea编译tomcat8源码
    • 参考博客地址:
    • 下载源码
    • 配置
    • 配置启动
    • 启动报错
    • 访问
    • 感想

参考博客地址:

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

下载源码

  1. 下载地址:官网下载地址
    Idea编译tomcat8源码_第1张图片

配置

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

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

     
    

     4.0.0
     org.apache.tomcat
     Tomcat8.0
     Tomcat8.0
     8.0
    
     
         Tomcat8.0
         java
         test
         
             
                 java
             
         
         
             
                 test
             
         
         
             
                 org.apache.maven.plugins
                 maven-compiler-plugin
                 2.3
                 
                     UTF-8
                     1.8
                     1.8
                 
             
         
     
    
     
         
             junit
             junit
             4.12
             test
         
         
             org.easymock
             easymock
             3.4
         
         
             ant
             ant
             1.7.0
         
         
             wsdl4j
             wsdl4j
             1.6.2
         
         
             javax.xml
             jaxrpc
             1.1
         
         
             org.eclipse.jdt.core.compiler
             ecj
             4.5.1
         
     
    
  3. 在apache-tomcat-8.5.38-src 同级目录新建 catalina-home并保证目录下面文件如下
    Idea编译tomcat8源码_第2张图片
    注意: 上面文件夹 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
    Idea编译tomcat8源码_第3张图片

  5. 导入pom文件
    Idea编译tomcat8源码_第4张图片
    Idea编译tomcat8源码_第5张图片

配置启动

  1. MainClass: org.apache.catalina.startup.Bootstrap
  2. VmOptions: -Dcatalina.home=“D:\work\project\learn\catalina-home”
    Idea编译tomcat8源码_第6张图片
    点击启动按钮

启动报错

  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();
        }
    

    Idea编译tomcat8源码_第7张图片

访问

  1. 访问 localhost:8080

    Idea编译tomcat8源码_第8张图片

感想

  1. 已经够详细了,亲测可以了

你可能感兴趣的:(tomcat)