今天對一個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都啟動了。
今晚的折騰還是有所收穫的。