今天接手一個(gè)09年的老項(xiàng)目,這個(gè)項(xiàng)目是Struts2的,早就忘光了,配置文件也一大堆,廢了老大勁解決出現(xiàn)的錯(cuò)誤,跑起來了,登錄成功后跳轉(zhuǎn)到首頁出現(xiàn)500錯(cuò)誤,報(bào)錯(cuò):“org.apache cannot be resolved or is not a field”
如圖所示:
根據(jù)這個(gè)提示應(yīng)該是EL表達(dá)式${ctxpath}沒有定義
但是報(bào)錯(cuò)地方上面也有用${ctxpath}的地方,例如:
這就特別奇怪了。
于是我初步懷疑是不是因?yàn)镋L在javascript里會出錯(cuò),找了半天還是沒有找到相關(guān)的解決辦法,直到我逐條把js代碼都刪掉,最后只剩下一個(gè)EL表達(dá)式變量了,但是還是報(bào)錯(cuò)。
沒辦法了,只能懷疑tomcat版本太高的緣故,更換為tomcat6后,錯(cuò)誤依然。
于是我還得逐步調(diào)試,終于發(fā)現(xiàn)問題所在^_^。
原因是在報(bào)錯(cuò)代碼之前有一段java程序,把java程序去掉就不會出現(xiàn)500錯(cuò)誤,難道這段java代碼會把${ctxpath}的值刪掉?
又逐條檢查發(fā)現(xiàn)一個(gè)讀取session的語句有問題
Organization org = (Organization)request.getSession().getAttribute(“abc”);
if(org!=null){
dept = org.getName();
}
這句話看起來挺正常的,但是request.getSession().getAttribute(“abc”)的值為null,按照我理解若是null的話轉(zhuǎn)換為任何對象不會報(bào)錯(cuò),但是實(shí)際上在jsp里出現(xiàn)錯(cuò)誤了,但是又不輸出錯(cuò)誤。這樣導(dǎo)致jsp無法被編譯,從而導(dǎo)致上面的EL表達(dá)式${ctxpath}找不到
最后解決辦法有兩種:
1.在登錄的代碼里添加上這個(gè)session,保證不能為空
2.先判斷是否為null然后再強(qiáng)轉(zhuǎn)類型
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。