前提说明:
1. 基于tomcat 8.0.26版本的源码
2. JDK1.7
操作说明:
1. 从Apache网站下载tomcat源码
2. 默认情况下,tomcat使用ant进行编译、打包,以下讲一下如何使用maven来编译、打包
3. 在Eclipse里新建一个maven标准Java项目
4. 将tomcat源码包下的Java里的文件拷贝到src/main/java下
5. 将conf和webapps拷贝到项目根路径下(请参考下图)
6. 使用以下maven配置
<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>com.test</groupId> <artifactId>tomcat8</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <maven.build.timestamp.format>yyyyMMdd HH:mm:ss</maven.build.timestamp.format> <VERSION>8.0.26</VERSION> <VERSION_NUMBER>8.0.26</VERSION_NUMBER> <VERSION_BUILT>${maven.build.timestamp}</VERSION_BUILT> </properties> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> <include>**/*.dtd</include> <include>**/*.xsd</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <configuration> <delimiters> <delimiter>@</delimiter> </delimiters> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>avalon-framework</groupId> <artifactId>avalon-framework</artifactId> <version>4.1.5</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>logkit</groupId> <artifactId>logkit</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>servletapi</groupId> <artifactId>servletapi</artifactId> <version>2.3</version> </dependency> <dependency> <groupId>geronimo-spec</groupId> <artifactId>geronimo-spec-jaxrpc</artifactId> <version>1.1-rc4</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.eclipse.jdt.core.compiler</groupId> <artifactId>ecj</artifactId> <version>4.4.2</version> </dependency> <dependency> <groupId>commons-daemon</groupId> <artifactId>commons-daemon</artifactId> <version>1.0.15</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.6</version> </dependency> </dependencies> </project>
最终项目的文件结构如下图:
经过以上步骤之后,编译应该能够通过了,如果这个时候我们使用Bootstrap启动tomcat,也能正常启动,但在打开页面时,会报Validator的什么NullPointException,主要是因为JspFactory里的工厂类没有被实例化,所以getFactory总是返回null。
JspFactory的实现类是JspFactoryImpl,然后在JasperInitializer里会被调用,如果JasperInitializer能够被正常启动,那么JspFactory就不会返回Null了。
在ContextConfig的1128行,有加载所有ServletContainerInitializer的机会,这里会去加载META-INF/services下面的所有ServletContainerInitializer的实现类,所以需要在META-INF/services下新建一个文件javax.servlet.ServletContainerInitializer,然后里面的内容是org.apache.jasper.servlet.JasperInitializer,这样再启动之后,就能够正常访问页面了。
以上这点也是我比较疑惑的,我在tomcat的bin版本发行包里,没有看到哪个jar包里面有META-INF/services/javax.servlet.ServletContainerInitializer这个文件,但是tomcat却可以直接运行,但为什么使用源码编译时,就必须添加这个文件呢?以后有时间再细细研究一下。
相关推荐
dubbo管理中心 源码 可以在tomcat8下jdk1.8下部署,需要用maven进行编译 ,首先dubbo-admin\src\main\webapp\WEB-INF 在这个下面修改dubbo.properties这个文件里面的zookeeper地址然后进入 dobbo-admin/下 运行cmd ...
java班级管理源码Maven 初学者教程 - 28 分钟内的示例 安装 Eclipse 和 Java 课程大纲 我们将使用 Handson Real World 示例来了解 Maven 可以做什么。 我们将了解 Maven 如何使应用程序开发人员的生活变得轻松。 ...
><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org
将maven的项目重新编译,在项目中右击,可以pom上右击,可以将pom(目录)下面的jar和war重新编译 如果出现以上情况,说明下载的jar包有问题,把这下面的文件删除,重新下载 每创建一个项目,都有pom.xml,所有的配置都...
基于tomcat-redis-session-manager源码进行的编译生成的jar包,压缩包中包含Tomcat7和Tomcat8打好的jar包。
Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码 项目描述 ...本项目是maven项目,当你下载完后,需要自己编译。 如果编译完成后,无法加入tomcat运行,请自行修
使用ant编译tomcat源码过程中ant编译失败需下载该包,可以下载后放到指定位置 或者自行搜索依赖后通过maven下载
Rust通用代码生成器莲花尝鲜版七源码。...解压缩后在第一级子目录的Lotus子目录下使用maven构建,命令为mvn install。请部署在Tomcat9的webapps目录下。欢迎使用。项目地址:https://gitee.com/jerryshensjf/Lotus/
Rust通用代码生成器莲花尝鲜版八源码。...解压缩后在第一级子目录的Lotus子目录下使用maven构建,命令为mvn install。请部署在Tomcat9的webapps目录下。欢迎使用。项目地址:https://gitee.com/jerryshensjf/Lotus
tomcat8.5的源码项目,tomcat需要ant进行编译,我没有下载ant,走的捷径直接将它转为maven项目。同时,因为中文显示乱码,我修改了一点代码,所有提示修改为全英文提示了。
无需修改原项目代码,只要把编译好的jar/war包用本工具加密即可。 运行加密项目时,无需求修改tomcat,spring等源代码。 支持普通jar包、springboot jar包以及普通java web项目编译的war包。 支持spring framework、...
jaxrpc.jar是编译运行tomcat源码需要的一个jar包,如果您需要,请下载!
tomcat_7_0_47_pom.xml, tomcat默认是使用ant编译,可以使用pom文件,当作maven项目启动。
本资源中包含三个安装包,maven、git、Jenkins。用于服务器Jenkins的自动部署使用。maven解压后配置环境变量就可以使用。git需要源码编译安装。Jenkins就不用多说了,直接拷贝到tomcat的webapps目录下就可以访问并...
ClassFinal是一款Java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译。项目模块说明:classfinal-core:ClassFinalde的核心模块...
运用了编译工具IntelliJ IDEA,采用Tomcat服务器和Maven库,页面运用了Html、JSP以及Bootstrap技术,数据库采用了MySQL数据库技术,后端采用了SSM框架以及XML、AJAX、jQuery等先进技术,系统大大提高了系统办公效率...
jdk8+tomcat9+mysql+IntelliJ IDEA+maven 项目技术(必填) springboot+mybatis-plus+layui+jquery 数据库文件(可选) 数据库脚本位于工程doc目录下 依赖包文件(可选) 项目采用Maven管理jar包依赖,编译工程自动...
如果使用框架自带的websocket服务器的功能,使用本地jetty跑没问题,如果使用tomcat跑,必须是tomcat9 直接运行Jetty类的main方法,即可启动web服务 如果访问jsp页面报错说编译错误,可能是因为安装了多个版本的jdk...
基于ssm实现的图书借阅管理系统源码+数据库(借阅、归还、列表查询、增删改查等功能).zip 【资源介绍】 编译环境 : jdk 1.8 mysql 5.0 及以上 tomcat 7 框架 : springmvc + spring + mybatis jar包管理工具 : ...
本系统采用MVC+J2EE+MYSQL实现,使用是Tomcat10.0作为WEB服务器,提供适应性强的Internet服务器功能,具有很高的执行效率。其中: - JSP用于页面的设计,展示数据 - Java用来处理具体业务逻辑,后台跳转、对数据库...