您好,登錄后才能下訂單哦!
今天接手一個09年的老項目,這個項目是Struts2的,早就忘光了,配置文件也一大堆,廢了老大勁解決出現的錯誤,跑起來了,登錄成功后跳轉到首頁出現500錯誤,報錯:“org.apache cannot be resolved or is not a field”
如圖所示:
根據這個提示應該是EL表達式${ctxpath}沒有定義
但是報錯地方上面也有用${ctxpath}的地方,例如:
<link href="${ctxpath}/jsp/newframe/themes/default/style.css" rel="stylesheet" type="text/css" media="screen"/>
<link href="${ctxpath}/jsp/newframe/themes/css/core.css" rel="stylesheet" type="text/css" media="screen"/>
這就特別奇怪了。
于是我初步懷疑是不是因為EL在javascript里會出錯,找了半天還是沒有找到相關的解決辦法,直到我逐條把js代碼都刪掉,最后只剩下一個EL表達式變量了,但是還是報錯。
沒辦法了,只能懷疑tomcat版本太高的緣故,更換為tomcat6后,錯誤依然。
于是我還得逐步調試,終于發現問題所在^_^。
原因是在報錯代碼之前有一段java程序,把java程序去掉就不會出現500錯誤,難道這段java代碼會把${ctxpath}的值刪掉?
又逐條檢查發現一個讀取session的語句有問題
Organization org = (Organization)request.getSession().getAttribute(“abc”);
if(org!=null){
dept = org.getName();
}
這句話看起來挺正常的,但是request.getSession().getAttribute(“abc”)的值為null,按照我理解若是null的話轉換為任何對象不會報錯,但是實際上在jsp里出現錯誤了,但是又不輸出錯誤。這樣導致jsp無法被編譯,從而導致上面的EL表達式${ctxpath}找不到
最后解決辦法有兩種:
1.在登錄的代碼里添加上這個session,保證不能為空
2.先判斷是否為null然后再強轉類型
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。