IDEA创建Tomcat8源码工程流程
上一篇文章的产出,其实离不开网上各位大神们的辅助,正是通过他们的讲解,我才对Tomcat的结构有了更进一步的认识。
但在描述前后端交互的过程中,还有很多细节并没有描述到位,所以就有了研究Tomcat源码的想法。
而在配置Tomcat源码工程的过程中,摸摸爬爬两个多小时,总算是成功启动了。
故撰写此篇博文,授之以渔。
- 准备工作
1.apache-tomcat-8.5.32-src源码包,官网下载并解压即可;
2.apache-ant-1.10.5(用的最新版)下载并安装:Tomcat源码默认采用的是ant编译;安装好以后配置环境变量
配置好环境变量后在dos下运行ant -version查看是否能成功使用
- 项目创建过程
1、pom.xml文件配置
由于需要将项目导入idea中,故需要在源码包的根目录下(即apache-tomcat-8.5.32-src下)创建如下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.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>3.1</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>
</project>
2、运行ant命令获取catalina-home的文件夹配置
为了得到catalina-home下的各类文件夹,从而成功使用Tomcat,需要利用ant命令来获取源码包对应的文件夹
1)在源码包文件夹同级下创建catalina-home文件夹;
2)进入win+R->cmd命令行内,cd进入源码包根目录下:即apache-tomcat-8.5.32-src下
3)运行ant;
运行结束之后,会在源码包根目录下的output/build中生成catalina-home所需的文件夹;将这些复制到源码包同级的catalina-home中。
- IDEA导入项目及配置
1、导入项目
启动idea,进行import project导入项目,导入时选择项目时选择源码包的目录,即apache-tomcat-8.5.32-src,一路默认选择即可。
2、配置
成功导入项目之后,必须得进行一系列配置才能成功启动项目。
1)点击菜单栏的Run,在下拉框中选择Edit Configurations。
2)在打开的弹框中进行如下配置:
a.点左上方绿色加号,选择Apllication。
b.名字随意。在MainClass处,输入:org.apache.catalina.startup.Bootstrap
c.VM options:填入刚刚创建的catalina-home文件夹路径,如我的是:
-Dcatalina.home="D:\Tomcat-Study\catalina-home"
d.Use classpath of module和pom文件中设置的Tomcat版本一直,不一致会无法成功创建application,一般会自动对应pom.xml文件中设置的;
e.确认好jre,点击apply,配置就算完成了。
- 启动项目
配置好了以后就可以启动项目了。可以找到/java/org.apache.catalina.startup.Bootstrap.java文件,在main函数中注入一行如下输出语句以便观察。
public static void main(String args[]) {
System.out.println("项目开始启动===============================");
if (daemon == null) {
// Don't set daemon until init() has completed
Bootstrap bootstrap = new Bootstrap();
try {
........
启动项目。控制台显示如下:
最终出现如下信息且无报错,则表示项目启动成功。
此时便可在browser上进行访问了,输入localhost:8080,出现Tomcat启动后的经典画面。
接下来你就可以进行Tomcat源码的调试及开发了。
IDEA创建Tomcat8源码工程流程的更多相关文章
- Tomcat8源码笔记(七)组件启动Server Service Engine Host启动
一.Tomcat启动的入口 Tomcat初始化简单流程前面博客介绍了一遍,组件除了StandardHost都有博客,欢迎大家指文中错误.Tomcat启动类是Bootstrap,而启动容器启动入口位于 ...
- Tomcat8源码笔记(六)连接器Connector分析
根据 Tomcat8源码笔记(五)组件Container分析 前文分析,StandardService的初始化重心由 StandardEngine转移到了Connector的初始化,本篇记录下Conn ...
- Tomcat8源码笔记(一)Lifecycle接口
第一次阅读Tomcat8源码,就以Lifecycle作为笔记阅读的开篇吧,一千个读者就有一千个哈姆雷特,每个人都Tomcat的理解都不同,如果不记录一次Tomcat源码可能忘了就忘了. 断断DEBUG ...
- Tomcat8源码笔记(三)Catalina加载过程
之前介绍过 Catalina加载过程是Bootstrap的load调用的 Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 ...
- Tomcat8源码笔记(八)明白Tomcat怎么部署webapps下项目
以前没想过这么个问题:Tomcat怎么处理webapps下项目,并且我访问浏览器ip: port/项目名/请求路径,以SSM为例,Tomcat怎么就能将请求找到项目呢,项目还是个文件夹类型的? Tom ...
- Tomcat8源码笔记(五)组件Container分析
Tomcat8源码笔记(四)Server和Service初始化 介绍过Tomcat中Service的初始化 最先初始化就是Container,而Container初始化过程是咋样的? 说到Contai ...
- Tomcat8源码笔记(四)Server和Service初始化
上一章 简单说明下Tomcat各个组件: Server:服务器,Tomcat服务器,一个Tomcat只有一个Server组件; Service:业务层,是Server下最大的子容器,一个Server可 ...
- Tomcat8源码编译及导入Eclipse中研究
最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改. 目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便. 1. Tomcat8源码编译 ...
- Python 多线程、多进程 (一)之 源码执行流程、GIL
Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.python ...
随机推荐
- javaweb项目开发错误代码
HTTP状态码(HTTP Status Code) 一些常见的状态码为:200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释:点击查看 1xx(临时响应) ...
- 过滤NSString中的Emoji
有时候由于项目需求.要过滤NSString中的emoji. 比方下面情况: 要跟android互通,android假设还没做这方面的支持. 内容做为手机短信发出去. 思路例如以下,遍历NSString ...
- Nginx https加密以及nginx日志配置与管理
Nginx https加密以及nginx日志配置与管理 使用Nginx的优点Nginx作为WEB服务器,Nginx处理静态文件.索引文件.自动索引的效率非常高.Nginx作为代理服务器,Nginx可以 ...
- Java对象类型的判断
instanceof 判断某个对象是否是某个类的实例或者某个类的子类的实例.它的判断方式大概是这样的: public<T> boolean function(Object obj, Cla ...
- Android学习之ItemTouchHelper实现RecylerView的拖拽以及滑动删除功能
今天在群里见大神们提到控件的拖动以及滑动删除的效果实现,就在网上找了资料ItemTouchHelper学习,并实现其功能.不胜窃喜之至,忍不住跟大家分享一下,如今就对学习过程做下简介.帮助大家实现这样 ...
- python 面试题 string int
str1 = 'hello' str2 = str1 str3 = str1 str4 = str1 str1 = '' int1 = 1 int2 = int1 int3 = int1 int4 = ...
- 编写gulpfile.js文件:压缩合并css、js
使用gulp一共有四个步骤: 1. 全局安装 gulp: $ npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: $ npm inst ...
- 浅谈.net平台下深拷贝和浅拷贝
在.net类库中,对象克隆广泛存在于各种类型的实现中,凡是实现了ICloneable接口的类型都具备克隆其对象实例的能力.所以本文讲述的深拷贝和浅拷贝也是在实现ICloneable接口的基础上进行的 ...
- iOS - url中文和特殊字符转码###
- (NSString *)generateUrl:(NSString *)url{ /** 第一个参数:NULL 第二个参数:C语言的字符串 第三个参数:NULL 第四个参数:要转义的字符串,不要乱 ...
- ubuntu 16.04 系统语言汉化
转载自:https://jingyan.baidu.com/article/5553fa82cedaa265a2393420.html