2013-05-08 20 views
1

我有一個webapp安裝在一個只讀文件系統上存在的Tomcat容器中。其結果是,我在啓動時看到這個消息(實際名稱更改爲保護有罪):如果scratchdir是隻讀的,Tomcat是否會緩存已編譯的JSP頁面?

嚴重:您指定的scratchDir:/ readonlyfs/tomcat的/工作/卡塔利娜/本地主機/對myApp是不可用的。

儘管出現此消息,該應用程序似乎仍在運行,並且很難確定,但似乎並未爲每次訪問都編譯JSP頁面。所以,我的問題是,編譯好的JSP頁面會發生什麼?他們是否緩存在內存中?他們被無限期地緩存了嗎?他們是否緩存?

我需要明確地知道,因爲應用程序將幾乎總是部署到只讀文件系統,如果這會導致性能問題,那麼我將不得不更改scratchdir指向另一個文件系統。但是,這給我想避免的部署過程帶來了額外的複雜性。所以,如果性能不受影響,即頁面被緩存在內存中,那麼我很樂意讓它獨立。我意識到序列化會話數據將在只讀文件系統上丟失,但這並不關心我,而且實際上是一個優點。這只是編譯頁面的處理問題。

+0

請添加Tomcat版本 – Michael 2013-05-08 05:29:23

+0

@Michael Tomcat 7.0.40 – Scott 2013-05-15 15:27:41

回答

2

看起來好像JSP已經被編譯了($ CATALINA_BASE/work下面是否存在.class和.java文件?)。這就是爲什麼看起來事情正在發揮作用。

如果你有一個空的,只讀的工作目錄(其中JSP引擎用於其scratchDir),你會看到下面的,如果你試圖訪問一個JSP啓動Tomcat:

HTTP狀態500 - 爪哇。 lang.IllegalStateException:沒有輸出文件夾

您有幾個選擇:a)觸摸每個JSP以確保它們已經全部編譯到工作目錄中,然後將完整的工作目錄包含在您的發行版中b)預編譯該JSPs

我會說b)是更好的選擇。

+0

這是正確的。 JSP沒有被編譯,所以沒有發生錯誤,但是當JSP需要編譯時,就會出現你描述的異常。我爲自己沒有看到這個而感到懊惱。謝謝! – Scott 2013-05-15 15:31:55

相關問題