2011-07-04 46 views
0

默認情況下,靜態文件位於WEB-INF目錄(如/images/logo.png訪問):如何更改WAR檔案中靜態文件的位置?

foo.war 
    WEB-INF 
    web.xml 
    images 
     logo.png 

我想改變的結構和使用這一個代替(仍然可以訪問如/images/logo.png):

foo.war 
    WEB-INF 
    web.xml 
    static 
    images 
     logo.png 

如何我可以用web.xml這樣做嗎?

+1

爲什麼???????????? –

+0

您提到的默認值不正確。 '/ WEB-INF' **中的文件不能直接訪問**。也許你正在使用一些爲你返回它們的servlet? – BalusC

回答

2

根據http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WCC3.html,:

甲WAR具有特定目錄結構 。 的頂級目錄WAR是 應用程序的文檔根目錄。文檔根目錄是 ,其中存儲JSP頁面,客戶端類 和存檔以及靜態Web資源 。

文檔根目錄包含子目錄 名爲WEB-INF,其中 包含下列文件和目錄 :

的web.xml:Web應用程序 部署描述符標籤庫 描述符文件(見標籤庫 描述符)類:包含服務器端類的目錄 : servlet,實用程序類和 JavaBeans組件lib:A 包含庫的JAR歸檔文件 (標記庫和任何 實用程序庫被 調用的服務器端類)。

還可以創建在 任一文檔根 應用特定的子目錄 (即,包目錄)或 WEB-INF/classes目錄。

所以默認行爲就是你要找的。您的文檔根目錄是否設置不正確,無法提供來自WEB-INF的內容?

1

您可以使用過濾器或URLRewriteFilter指向/images/*/static/images/*

如果你只是想你的文件夾結構是/static/images的開發時間組織的目的,但部署URL是/images - 你可能需要改變你的構建腳本來/static/**複製到/

我個人不會打擾我的靜態文件是否被稱爲/static/images/images - 因爲它們會在我的代碼中引用(僅),我已經控制了它。

如果你在CSS中使用這些文件,這就是爲什麼你想要的路徑保持不變...更好地保留圖像在/static/css/images下,並有CSS中引用的圖像在這裏。通過這種方式,不管你移動CSS文件夾的位置,你都不會打擾你的CSS。

3

如果您使用HTTP GET直接訪問WEB-INF下的文件,容器將反彈並顯示404 NOT FOUND錯誤。

但現在,你說你可以通過/images/logo.png訪問WEB-INF/images/logo.png,所以我覺得你的web應用程序最有可能實現這一結果被一些URLRewriteFilter mechainsim或在servlet級別的Java代碼(如過濾器),或者通過你的網站應用程序的框架。我建議你檢查一下你的Web應用程序,看看現在什麼機制導致這個錯誤,並相應地配置你想要的結果。