最近手头有个公司的老项目使用的是tomcat5.5 jdk1.6,
使用框架struts2+ibatis
由于客户方提出项目存在bug是因为tomcat5.5存在漏洞引发的
故项目经理要我对此项目进行升级
升级目标:jdk1.7,tomcat8.5 (听一个算是公司大牛的同事说他们测试过tomcat8.0也存在漏洞,虽然不知道他们是怎么测试的)
在升级的过程中出现了一个问题,问题是这样的
当我在eclipse中运行项目的时候 项目可以正常跑动,但是当我把项目打成war包之后部署到tomcat8.5中运行的时候,
问题出现了。当我进行登录的时候 发现tomcat报出空指针,这个空指针指向的是下面这句代码
这个sqlMap.getSqlMap()返回的是个null
于是我进入了这个方法,发现在下面这一句的时候
sqlMap怎么也接收不到SqlMapClientBuilder.buildSqlMapClient(reader);返回的值。
我屮艸芔茻 这就很奇怪啊!!!
于是立马把排查目标放在了ibatis的jar包身上
网上说ibatis-2.3.4.726.jar这个版本存在着一些问题 于是我又换了ibatis的jar包
。。匆匆好几天过去了(由于项目经理经常出差,问了两个同事 均不得而知,只能自己一个人排查了 )
种种原因都排查了 于是想可能是jar包版本和jar可能存在冲突的原因
由于个人能力有限 于是带回住处跟小伙伴一起讨论排查
17:30下班19:00到家 跟小伙伴一直排查到凌晨3点钟
恶魔妈妈买面膜。。。 小伙伴也没办法了 结果就一个 java.lang.NullPointerException
小伙伴也没办法了 最后下了一个可能是jar包冲突的结论!
当项目经理回来的时候我立刻向老大汇报了情况
老大在他自己电脑上测试说没问题 what???没问题???
老大用的tomcat9测试的 然后用了我发给他的tomcat8.5测试了一下
这是出现了跟我相同的问题 老大说是tomcat的问题
于是我下了tomcat9 发现9需要jdk1.8支持
于是安装了jdk1.8 这时候怎么运行都不行的war包果然可以跑起来了
嘿~ 难道真的是tomcat8.5的原因 但想一下觉得没道理啊 于是发现了jdk1.8输出的是中文的日志信息
而我之前的jdk1.7输出的日志信息是英文的 加上想起之前三更半夜跟小伙伴一起debug测试的时候发现jdk很多类进不去
所以猜测有可能是jdk的原因,于是用jdk1.8再次运行tomcat8.5 嘿~ 果然成功登陆进来了
随后又想到应该不是jdk1.7版本的原因 而是我个人使用的jdk1.7.0_17的原因 于是下载了另一个版本的jdk1.7.0_80(我并不清楚jdk的英文版和中文版)只知道jdk1.7.0_80输出的日志信息也是中文的
例如: jdk1.7.0_17输出警告就是"Warning" 而jdk1.7.0_80直接就是"警告"这俩字
最后对比了jdk1.7.0_17和jdk1.7.0_80 发现直接大小差距巨大,而一个子版本的推进我认为是不可能有这么大的改动的
jdk1.7.0_17 大小90.4M
jdk1.7.0_80 大小140M
问题解决了 是我使用的jdk1.7.0_17版本的原因 (可能是盗版)
最后附上成功的图
公司做物联网的