东方通TongWeb替换Tomcat的踩坑记录

一、背景

由于信创需要,原来项目的用到的一些中间件、软件都要逐步替换为国产品牌,决定先从web容器入手,将Tomcat替换掉。在网上搜了一些资料,结合项目当前情况,考虑在金蝶AAS和东方通TongWeb里面选择,后又发现好像AAS的资料好像较少,所以决定先选择TongWeb,以后有需要再研究AAS算了。

二、环境

1、现状:代码:SpringMVC+Hibernate;web容器:Tomcat7;JDK:1.7

2、测试环境:

本地开发环境:idea2021.2(东方通给的idea的TongWeb插件只支持到这个版本,是否有更新的版本未知)、JDK1.7

服务器环境:麒麟服务器操作系统V10、JDK1.8(系统己自带安装,试过发现可以跑项目,就没有换了)

三、关于TongWeb的安装

1、本地开发我是根据东方通的使用手册,下载了对应版本的idea,然后安装了插件,尝试在本地先运行项目;

2、服务器上安装TongWeb资料很多,可以搜一下按步骤操作就行了。基本上也就是解压缩,然后执行运行脚本就行了。

注意的一点是记得上传tongweb的licence.dat文件到安装的根目录,这个文件是东方通客服发的试用证书,也就一个月的有效期。

四、替换之路

一开始考虑直接将本地项目打成war包,利用TongWeb的控制台,上传到服务器上部署,结果当然是部署失败,其实TongWeb这里的部署,应该就是上传文件,然后执行启动脚本,从日志来看,提示是少了一些类文件,没办法,只能先尝试本地启动,解决异常。

1、idea安装tongweb插件

在idea中配置好tongweb的插件(具体配置过程就不说了,tongweb的插件在其安装文件目录里面,只需要用对应版本的idea就行了,高版本的idea插件是不兼容的,不能安装);

++2、解决本地运行的异常++

本地运行项目可以参考之前在tomat上部署一样,启动后,主要是一些java.lang.NoClassDefFoundError 异常,起初,一看这些异常,以为是部署不正确,导致项目的jar包没有正常部署过去,又以为是jar包冲突了,在这上面折腾了一段时间,后面看到一篇文章:java.lang.NoClassDefFoundError:org/apache/struts2/views/jsp/ui/AbstractUITag_tongweb部署报错classnotfoundexception:org.apache.strut-CSDN博客

这个是解决tomcat迁移到weblogic上的问题,从中受到了启发,才想起来可能是容器无法解析、编译JSP的原因,尝试从这方面入手。根据错误提示,找到了对应的jar包,复制到tongweb的安装目录下 \lib\endorsed里面,重新启动,没想到前面的异常没有了,换了缺少一个其他的类的异常了,发现有用以后,其实就把问题变成找到对应的jar包的问题了。直到把启动阶段的异常解决,能正常启动,登录、访问系统又发现还有一些其他的类找不到的异常,又添加一些其他jar包,最终才正常部署系统,并使用功能。

碰到的一些异常包括:

(1)java.lang.NoClassDefFoundError:org/apache/struts2/views/jsp/ui/AbstractUITag

添加了struts2的相关jar包解决;

(2)java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/DynamicAttributes

添加了servlet相关的jar包解决;

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String

这个异常是servlet-api这个jar包版本过低,如果出现这个异常,需要更换更高一点的版本才行,参考:错误:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String-CSDN博客

(3)java.lang.ClassNotFoundException: org.apache.el.ExpressionFactoryImpl

缺少EL表达式相关的jar包,因为老项目中用到了el表达式,所以需要这块相关jar包支持

最后将各种异常处理完以后,系统部署成功,访问系统各项功能基本正常,初步完成。再总的列一下额外添加的jar包:

3、添加Jar包注意事项

(1)、找的jar包的版本要与JDK版本相匹配,不要一味找最新的,最新的jar可能需要更高版本的JDK才能运行,在低版本JDK上运行 会出现 Unsupported Java Version ,has been compiled by a more recent version of the 错误;

(2)、如果出现 **java.lang.NoSuchMethodError 这类错误,**那应该是jar包版本老了,没有新的方法,需要找较高版本的jar包;

(3)每个项目所需要的jar包不一定一样,需要参考具体异常信息补充jar包,不要一股脑的按我前面所列的jar包添加;

(4)个人经验:老项目的一些jar包比较难找,我是利用maven添加指定版本的pom依赖以后下载到本地仓库中,然后再在本地仓库中去找jar包,这样省时省力;

4、服务器部署运行

需要同样的将额外添加的jar包上传到服务器的TongWeb安装位置,对应的目录里面,然后通过TongWeb的管理控制台以war包形式或者指定项目运行目录的方式部署好运行就可以了,正常启动后,能在管理界面的应用管理功能中看到项目状态是己部署;

以上是个人使用Tongweb替代Tomcat部署项目的经过,为自己记录,也希望对其他小伙伴有用!!!

相关推荐
Coder码匠7 小时前
Dockerfile 优化实践:从 400MB 到 80MB
java·spring boot
李慕婉学姐15 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆16 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin17 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model200517 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉17 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国17 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_9418824817 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈18 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_9918 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc