搭建环境,先去tomcat官网下载源码
解压源码,在源码根目录下新建文件夹catalina-home,把conf和webapps文件夹剪切复制进去
打开idea 创建一个空项目(tomcat-study)
把整理好的tomcat源码文件复制到tomcat-study项目下
我们使用maven来构建tomcat项目,创建一个 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.0modelVersion> <groupId>org.apache.tomcatgroupId> <artifactId>Tomcat8.5artifactId> <name>Tomcat8.5name> <version>8.5version> <build> <finalName>Tomcat8.5finalName> <sourceDirectory>javasourceDirectory> <testSourceDirectory>testtestSourceDirectory> <resources> <resource> <directory>javadirectory> resource> resources> <testResources> <testResource> <directory>testdirectory> testResource> testResources> <plugins> <plugin> <groupId>org.apache.maven.pluginsgroupId> <artifactId>maven-compiler-pluginartifactId> <version>2.3version> <configuration> <encoding>UTF-8encoding> <source>1.8source> <target>1.8target> configuration> plugin> plugins> build> <dependencies> <dependency> <groupId>junitgroupId> <artifactId>junitartifactId> <version>4.12version> <scope>testscope> dependency> <dependency> <groupId>org.easymockgroupId> <artifactId>easymockartifactId> <version>3.4version> dependency> <dependency> <groupId>antgroupId> <artifactId>antartifactId> <version>1.7.0version> dependency> <dependency> <groupId>wsdl4jgroupId> <artifactId>wsdl4jartifactId> <version>1.6.2version> dependency> <dependency> <groupId>javax.xmlgroupId> <artifactId>jaxrpcartifactId> <version>1.1version> dependency> <dependency> <groupId>org.eclipse.jdt.core.compilergroupId> <artifactId>ecjartifactId> <version>4.5.1version> dependency> dependencies>project>
在idea中导入项目
给 tomcat 的源码程序启动类 Bootstrap 配置 VM 参数,因为 tomcat 源码运⾏也需要加载配置⽂件等
使用idea自动提示将问题修复后,重新启动main函数,并访问http://localhost:8080/,发现会有如下报错
原因是Jsp引擎Jasper没有被初始化,从⽽⽆法编译JSP,我们需要在tomcat的源码ContextConfig类中的configureStart⽅法中增加⼀⾏代码将 Jsp 引擎初始化context.addServletContainerInitializer(new JasperInitializer(),null);
修改后再次重启tomcat就可以正常访问啦