[Tomcat源码分析] Eclipse中搭建Apache Tomcat源码调试环境

网上很多文章都推荐使用Ant下载编译,但本地实践中屡屡失败,无法下载。

后来参考 https://blog.csdn.net/xiongyouqiang/article/details/78941077 总算把调试环境搭建完成。

以下文章几乎完全copy上述网址,但稍作延展。

下载源码

官网直接下载源码

http://tomcat.apache.org/download-70.cgi

源码导入到Eclipse中

第1步:Eclipse中新建一个Java Project,例如名称可以是Tomcat-Src

第2步:在工程上点击右键=>Import=>General=>File System,点击Next按钮。

第3步:点击Browser按钮,找到tomcat源码解压路径,勾选java、test、conf和webapps目录(注意不需要勾选examples目录),点击Finish按钮。

第4步:在java和test目录上点击右键=>Build Path=>Use As Source Folder將这两个目录设为源码目录。同时可以删除工程中原有的src目录了。

第5步:解决导入后工程中出现的编译错误,一般都是由于缺少某些jar导致

主要导入以下几个jar饱

ant.jar

ecj-4.4.2.jar

jaxrpc.jar

wsdl4j-1.5.2.jar

easymock-3.5.1.jar

在工程中新建一个lib目录,將这些jar包放到该目录下,同时添加到build path中。

apache tomcat采用junit作为单元测试工具,我们需要为工程添加Junit支持,在工程上点击右键=>Properties=>Java build path。

点击Add Library按钮,选择Junit4即可。

此时test包中的TestCookieFilter类会报CookieFilter编译异常,这是因为缺少CookieFilter这个类导致,经过一番查找总算找到了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;

}

}

此时仍有部分error,但不影响调试

设置Debug Configuration,设定程序入口,开始调试!

————————————————
原文链接:https://blog.csdn.net/xiongyouqiang/article/details/78941077

原文地址:https://www.cnblogs.com/tyyt/p/12032268.html

时间: 2024-10-29 19:11:11

[Tomcat源码分析] Eclipse中搭建Apache Tomcat源码调试环境的相关文章

mac系统中搭建apache+mysql+php的开发环境,安装mysql后,登录报错:mac ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

php新手在mac系统中搭建apache+mysql+php的开发环境(按照这篇博客来操作的:http://my.oschina.net/joanfen/blog/171109?fromerr=xvCsafCe),在安装配置mysql完毕后,登录mysql,报错:mac ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO),折腾很久,终于解决,随手记录下,备忘. 解决方法: 第一步:如

Tomcat源码分析二:先看看Tomcat的整体架构

Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Connector.Container等组件,接下来我们一起去大致的看看这些组件的作用和他们之间的相互联系.在这之前,我们先补充一个知识点,也就是Tomcat它实现的功能点是什么呢?通过查找一些资料,这里参考下极客时间<深入拆解Tomcat_Jetty>中的总结,即Tomcat 要实现 2 个核心功能:

jQuery源码分析-jQuery中的循环技巧

Js代码   作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:[email protected] 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. 前记:本文收集了jQuery中出现的各种遍历技巧和场景 Js代码   // 简单的for-in(事件) for ( type in events ) { } Js代码   // 缓存length属性,避免每次都去查找length属性,稍微提升遍历速度 // 但是如果遍历HTMLCollection时,性能提升非常

Android Eclipse中查看 Android框架源码

有时候用Eclipse想按住ctrl键查看源码怎么办? 下面具体步骤让你轻松看源码: project->properties->java build path->libraries 点击android.jar下面的source: 这里可以添加zip和文件夹,zip可以去git下载,我这里用的是用sdk manager下载的源码,如下: 从这里面下载的源码就保存在sdk下面的source下面,选一个平台关联就可以了 下面就是button源码: @RemoteView public clas

在Eclipse中关联Android API源码

在Eclipse中快速关联API源码,便于查看类以及方法.方法如下: 1. 在对应的项目文件右键——>properties——>java build path——>libraries——>Android 4.3——>android.jar——>Source attachment——>Edit 2. 在编辑框中关联sdk中对应的API源码就可以了

我们的相识,总是那么巧。-------eclipse中搭建maven项目

一.我们就来谈下eclipse中搭建maven web工程的步骤!虽然就是一个简单的例子,但是过程是很艰辛的. 首先我们看一下eclipse的封面,下面就是刚打开的华丽封面哦 其次我安装了eclipse的JavaEE IDE,然后开始具体的步骤了 1.Ctrl + N调出新建窗口,双击选择Maven Project 2.直接点击下一步 3.双击选择maven-archetype-webapp 4.根据个人情况输入Group Id和Artifact Id,Package会自动生成,点击finish

在Eclipse中搭建Dagger和Dagger2使用环境

眼下Dagger有两个版本号,一个是square的Dagger1.x,另外一个是由google主导与squre联合开发的Dagger2. 本文介绍一下在Eclipse中搭建Dagger和Dagger2使用环境.样例採用的均为Dagger和Dagger2官方提供的 "咖啡"案例(Dagger1.x的案例位置在example/simple目录下.Dagger2的案例位置在example/simple目录下). Dagger1.X: 1. 首先下载Dagger1.x的相关内容. jar文件能

OpenStack_Swift源码分析——创建Ring及添加设备源码详细分析

1 创建Ring 代码详细分析 在OpenStack_Swift--Ring组织架构中我们详细分析了Ring的具体工作过程,下面就Ring中增加设备,删除设备,已经重新平衡的实现过程作详细的介绍. 首先看RingBuilder类 def __init__(self, part_power, replicas, min_part_hours): #why 最大 2**32 if part_power > 32: raise ValueError("part_power must be at

cocos2d-x 源码分析 : Ref (CCObject) 源码分析 cocos2d-x内存管理策略

源码版本来自3.x,转载请注明 cocos2d-x 源码分析总目录: http://blog.csdn.net/u011225840/article/details/31743129 1.Ref,AutoreleasePool,PoolManager Ref中包含了一个叫referenceCount的引用计数,当一个Ref类的变量被new的时候,其referenceCount的引用计数被置为1. 其中有三个重要的操作,retain,release,autorelease,下面源码分析时会详细说明