vlambda博客
学习文章列表

手把手教你把Tomcat源码跑起来!

    很多在学习Tomcat的时候,可能都会有像俺一样的心情,看到别人提到的一些Tomcat中的类名方法名(比如链接器中的EndpointProcessor ,Adapter )总想自己去代码里面一看究竟,或者想去自己亲自debug看看。

    但是网上的教程千篇一律,自己又不知道该看哪个,那么下面俺就亲自走一趟,把亲测可用的方法分享给大家。

    首先贴出一张运行成功的图,为了证明确实是亲测有效的!!

进入正文


step 1: 去官网下载对应的Tomcat的源码包,注意是源码包


a)官网链接:https://tomcat.apache.org/

b)选择自己需要的版本,找到对应的源码进行下载

手把手教你把Tomcat源码跑起来!

手把手教你把Tomcat源码跑起来!

step 2:构建可以运行的文件目录


a)下载完解压后在如下的文件目录中新建catalina-home

手把手教你把Tomcat源码跑起来!

b)将conf和webapp文件拷贝进去。注意是拷贝不是移动进去。

这样可以运行的目录就构建好了


step3:配置IDEA运行环境


a)用IDEA的open打开我们创建的tomcat-home文件夹,并添加maven支持。(右键工程→Add Framework Suppot,选择maven)

b)在生成的Maven文件中添加如下内容

 <build> <finalName>Tomcat8.5</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>

可能如下两行会飘红但是不影响运行。

 <sourceDirectory>java</sourceDirectory> <testSourceDirectory>test</testSourceDirectory>

到此为止就搞定了。

接下来找到Bootstrap类然后右键运行,可能是报一些测试方法的错误,将其屏蔽就好了。。这个时候顺手添加一下如下的参数

手把手教你把Tomcat源码跑起来!

-Dcatalina.home=C:\code\apache-tomcat-8.5.54-src\catalina-home-Dcatalina.base=C:\code\apache-tomcat-8.5.54-src\catalina-home-Djava.endorsed.dirs=C:\code\apache-tomcat-8.5.54-src\catalina-home\endorsed-Djava.io.tmpdir=C:\code\apache-tomcat-8.5.54-src\catalina-home\temp-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djava.util.logging.config.file=C:\code\apache-tomcat-8.5.54-src\catalina-home\conf\logging.properties

文件路径换成你自己的即可。


再次运行。可能会报如下错误

手把手教你把Tomcat源码跑起来!


莫慌:找到org.apache.catalina.startup.ContextConfig#webConfig这个函数,在其下面添加如下语句即可。

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


然后在运行。


可以看到tomcat运行起来了。这个时候浏览器输入:http://localhost:8080/

就可以访问Tomcat了!!


ps:有什么问题欢迎留言或者私信一起讨论交流,有问必答!