2012-03-04 164 views
6

我使用Netbeans創建了一個Web應用程序。之前,當我通過netbeans和tomcat服務器(這是一個zip)運行web應用程序之前,我的所有外部文件(用於我的應用程序的上傳文件和其他幫助程序文件)都存儲在bin目錄中。tomcat在哪裏存儲我的文件?

現在,我嘗試使用Windows安裝程序安裝apache tomcat服務,因爲我想知道如何在專用服務器上部署項目。我已經使用tomcat的部署實用程序成功部署了war文件。但是,當我通過apache tomcat windows服務運行該項目時,它不會保存bin目錄中的文件,也無法讀取我粘貼到bin目錄中的文件。

你認爲我應該把我的文件放在哪裏?

編輯:在觀察tomcat服務目錄時,我發現它存儲在根目錄中。如果我在'E:\ Apache \ services \ tomcat \'中安裝了我的tomcat,它將存儲在'tomcat'目錄中。

回答

4

當您安裝Apache,這個項目應該是Web應用程序文件夾中:

C:\Apache\tomcat\webapps 

像我的項目是gaganisonline這樣的目錄結構是這樣的:

路徑:C:\Apache\tomcat\webapps\gaganisonline

      gaganisonline 
          |   | 
         WEB-INF  index.html 
          | 
       --------------------------- 
       |   |  |  | 
      web.xml src lib classes 
+0

是的,我知道我的項目在webapps目錄中。但是,我想知道當我的webapp運行時,tomcat服務器在哪裏編寫和存儲這些文件。不管怎麼說,還是要謝謝你。 – braindead 2012-03-04 08:17:03

+0

這裏的ROOT文件夾是Tomcat的根。您看到的第一頁index.jsp駐留在該文件夾中。 Tomcat正在編寫什麼類型的文件並假設要存儲? – 2012-03-04 08:34:51

5

最終,它是您的應用程序確定文件存儲位置的方式。

通過它的聲音,您的應用程序將文件存儲在JVM的當前目錄中,當您通過NetBeans啓動Web服務器時,恰好是「bin」目錄。如果是這樣,你會發現它們,無論當前目錄是什麼時候Tomcat作爲Windows服務啓動。

坦率地說,我認爲你有這個錯誤。你應該有意識地決定上傳的文件應該是存儲,然後確保你使用的上傳機制把它們放在那裏。

顯然,把它們放在當前目錄是一個壞主意。您不希望它們存儲在不同的地方,具體取決於Web容器的啓動方式。很明顯,「bin」目錄是不恰當的地方。 (如果用戶試圖上載其名稱匹配的是生活在「bin」的腳本的一個文件,會發生什麼?)


那麼,應該你可以把文件?

在我看來,你有三種選擇:

  • work目錄的子目錄中......這就是傳統的Tomcat把暫時的文件,如編譯的JSP。

  • 在Tomcat安裝目錄的自定義子目錄中。

  • 在文件系統中其他位置的單獨目錄中。

你不應該在webapp目錄下探話,因爲文件通常有吹走當Web應用重新部署,因爲有這麼上傳的文件將與你的web應用干擾的風險更大。

由於存在干擾的風險,您不應該將它們放在bin或logs或lib或config目錄中,因爲它們根本就不是合乎邏輯的地方。


如果你想寫相對於Tomcat安裝目錄的根目錄的文件,你可以發現,是通過調用System.getProperty("catalina.base")什麼。

但是,你要做什麼,你需要確保用戶不會無意或故意將文件上傳到錯誤的地方;例如通過提供絕對路徑名或使用「../../....」從您的上傳區域轉義的路徑名。

+0

在「名稱匹配'bin中的其中一個腳本」的情況下,我有點安全,因爲我將它存儲在'bin'的一個目錄中。無論如何,我想把你的建議存儲在另一個目錄旁邊。我現在的問題是如何做到這一點?我不喜歡使用像'C:\ Apache \ tomcat \ file.txt'這樣的確切文件路徑。我通常使用相對路徑。有沒有任何解決方法,或者我應該使用確切的文件路徑? 如果我從我的webapp中訪問文件,我的根目錄是什麼? – braindead 2012-03-04 04:22:25

+0

查看已更新的答案... – 2012-03-04 09:43:53