手把手教你把Tomcat源码跑起来!
很多在学习Tomcat的时候,可能都会有像俺一样的心情,看到别人提到的一些Tomcat中的类名方法名(比如链接器中的Endpoint,Processor ,Adapter )总想自己去代码里面一看究竟,或者想去自己亲自debug看看。
但是网上的教程千篇一律,自己又不知道该看哪个,那么下面俺就亲自走一趟,把亲测可用的方法分享给大家。
首先贴出一张运行成功的图,为了证明确实是亲测有效的!!
进入正文
step 1: 去官网下载对应的Tomcat的源码包,注意是源码包
a)官网链接:https://tomcat.apache.org/
b)选择自己需要的版本,找到对应的源码进行下载
step 2:构建可以运行的文件目录
a)下载完解压后在如下的文件目录中新建catalina-home
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类然后右键运行,可能是报一些测试方法的错误,将其屏蔽就好了。。这个时候顺手添加一下如下的参数
-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
文件路径换成你自己的即可。
再次运行。可能会报如下错误
莫慌:找到org.apache.catalina.startup.ContextConfig#webConfig这个函数,在其下面添加如下语句即可。
context.addServletContainerInitializer(new JasperInitializer(), null);
然后在运行。
可以看到tomcat运行起来了。这个时候浏览器输入:http://localhost:8080/
就可以访问Tomcat了!!
ps:有什么问题欢迎留言或者私信一起讨论交流,有问必答!