今天對一個WebApp做完修改,導出成war包,再發布到Tomcat7中,居然訪問不了了!
同樣的問題一周前也出現過,后來一頓鼓搗,又莫名其妙好了,當時認為是Tomcat7鬧點小毛病,也沒多想。
但是根據墨菲定律,問題不解決不它遲早要爆發出來,這不今天就又遇到了。
我在FireFox的地址欄試着刷新一下,碰巧首頁有反應了,背景圖能看到,但是登錄框下有大片的異常信息,我仔細一看是說某個用jsp:include載入的頁面不見了。
這時我覺得是打包程序有錯誤,於是進入服務器的WebApp目錄下去找解開的文件,奇怪的是發現當事頁面赫然在位!
異常信息說沒有,但目錄里文件好好的,這是怎么回事?!
想到WebApp在某目錄下存在幾個靜態頁面,確認其存在后,我試着在地址欄輸入地址,一回車,出現了如下的異常:
org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder:
?!有問題。 在網絡上搜索一下,大致原因是某目錄沒有被讀寫的權限,導致文件不能被編譯到指定的工作目錄中。估計所有JSP文件都沒有被編譯成Servlet。
再看看上傳時啟動Tomcat7的用戶不是root,而是另外一個用戶rts,以前用root用戶啟動Tomcat后,上傳完沒有一次出錯的。上一次出錯,由於某些程序必須要rts用戶啟動,就在root和rts用戶間切換了幾次。rts用戶和root用戶權限明顯是有差別的,這個應該就是導致某目錄沒有讀寫權限的原因。
於是shutdown tomcat,切換到root用戶,startup tomcat,再upload war,完畢后正確啟動了WebApp。
再shutdown tomcat,切換到rts用戶,startup tomcat,WebApp和必須用rts啟動的另一個app都啟動了。
今晚的折騰還是有所收獲的。