最近手頭有個公司的老項目使用的是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版本的原因 (可能是盜版)
最後附上成功的圖
公司做物聯網的