zoukankan      html  css  js  c++  java
  • 008-tomcat源码阅读-查看源码、日志配置、启动配置、启动

    一、概述

      tomcat源码阅读

    二、使用idea打开源码

    2.1、环境

    macos、idea、apache-tomcat-8.5.61

    2.2、步骤

    1、下载解压

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

    找到:Source Code Distributions  下的zip包下载即可,然后解压

      

    2、基础配置

    手动添加文件夹catalina-home,将conf、webapps两个文件夹复制进来,并且新建lib、logs、temp、work四个空文件夹。

    添加pom.xml文件

      

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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.0</modelVersion>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>Tomcat8</artifactId>
        <name>Tomcat8</name>
        <version>8</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>4.0.2</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>
            <dependency>
                <groupId>javax.xml.soap</groupId>
                <artifactId>javax.xml.soap-api</artifactId>
                <version>1.4.0</version>
            </dependency>
    
        </dependencies>
    </project> 

    3、用idea打开项目

    在pom.xml鼠标右击选择as maven project,module构建。

    程序入口如下:

      

    通过org.apache.catalina.startup.Bootstrap中的main方法启动。

    我们在IDEA中配置Application方式启动,附带启动参数。

    注意此时:TestCookieFilter中的CookieFilter 找不到,两种方案:1、注解注释;2补全这个代码,同级下增加如下

    /*
     * 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;
        }
    }
    View Code

    4、启动配置、配置jsp解析器、日志信息

    启动参数配置

     

    配置jsp解析器

      在类:org.apache.catalina.startup.ContextConfig#configureStart,的webConfig();后配置jsp解析器

    context.addServletContainerInitializer(new JasperInitializer(), null); 

    日志版本乱码问题:查看:VersionLoggerListener 发现StringManager sm变量发现,local为zh_cn,一般配置均未生效,采用绕过,配置en如下:

    -Dfile.encoding=UTF8
    -Duser.language=en
    -Duser.region=US
    -Dcatalina.home=/Users/lihongxu6/ideaProjects/apache-tomcat-8.5.61-src/catalina-home
    -Dcatalina.base=/Users/lihongxu6/ideaProjects/apache-tomcat-8.5.61-src/catalina-home
    -Djava.endorsed.dirs=/Users/lihongxu6/ideaProjects/apache-tomcat-8.5.61-src/catalina-home/endorsed
    -Djava.io.tmpdir=/Users/lihongxu6/ideaProjects/apache-tomcat-8.5.61-src/catalina-home/temp
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=/Users/lihongxu6/IdeaProjects/apache-tomcat-8.5.61-src/catalina-home/conf/logging.properties

    启动项目,输入localhost:8080即可。 

    转载请注明出处,感谢。
    作者:李宏旭
    阅罢此文,如果您觉得本文不错并有所收获,请【打赏】或【推荐】,也可【评论】留下您的问题或建议与我交流。
    你的支持是我不断创作和分享的不竭动力!
  • 相关阅读:
    撩课-Web大前端每天5道面试题-Day15
    撩课-Web大前端每天5道面试题-Day14
    撩课-Java每天5道面试题第26天
    撩课-Java每天5道面试题第25天
    撩课-Web大前端每天5道面试题-Day13
    撩课-Java每天5道面试题第24天
    撩课-每天刷Web面试题(前10天汇总)-Day12
    撩课-Java每天5道面试题第23天
    撩课-Web大前端每天5道面试题-Day11
    java设计模式-策略模式
  • 原文地址:https://www.cnblogs.com/bjlhx/p/14348256.html
Copyright © 2011-2022 走看看