单个 tomcat 下运行多个 war 应用, 问题与解决方法

Java54

公司内有两个 Java web 应用,最近需要去客户处展示,需要安装在一台笔记本电脑上。

两个 Java web 应用,都有些年头了,最初使用 Java 1.6 开发,现使用 Java 8 重新编译。

有一台 16G 内存、500G 硬盘的笔记本,惠普战66。尝试将两个Java web 应用安装在此电脑里同一个 tomcat 内。

想着很简单,打包成 war 文件(分别是 zsso.war, pkg.war), 复制到 C:\java\apache-tomcat-9.0.52\webapps 目录下,改些配置文件,启动 tomcat 的 bin\startup.bat , 应该就行了。

其中,zsso.war 是公司的一个单点登录软件产品,自带用户登录、权限配置等功能。此次是 pkg.war 更改时间紧张,不想再去动权限配置功能,想着可以借用 zsso.war 的功能,节省点开发时间,就算免费送客户一套单点登录系统好了。节省了开发时间,也是好的。

结果运行报错,pkg 能启动起来,zsso 启动失败,tomcat 自带的 docs, examples, host-manager,manager,ROOT 几个应用也启动失败。报错信息相同,均为 XML 解析的 class 找不到:

查 tomcat 文档, http://tomcat.apache.org/tomcat-9.0-doc/class-loader-howto.html,里面专门有一章节 "XML Parsers and Java"。虽然没看明白,这个与我们此次报错有什么关联。但猜测,Java 中的 XML 解析相关类,与 class loader 紧密相关。

经调查,pkg.war 中使用了 SAX XML 解析,而 zsso.war 中没有使用。

推测 pkg.war 中使用了 SAX XML 解析,用了某个特定方式,导致影响了 zsso.war,也影响了 tomcat 自带的几个 web 应用及示例。

查找代码,有如下:

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长