2016-06-11 86 views
0

我一直在研究包含JSP文件的簡單Java Web應用程序。我一直試圖通過位於WAR文件上下文根中的JSP文件來訪問駐留在WEB-INF/classes目錄中的資源文件,如css文件和圖像。訪問位於WEB-INF文件夾內的資源

該項目結構是基於Maven War Plugin下的推薦結構創建的。我在這個論壇中經歷了幾個解決類似問題的解決方案,但他們都沒有爲這個新的結構工作。

我們如何從位於context-root的JSP文件中訪問位於WEB-INF/classes目錄中的資源? example WAR file with the mentioned structure

+0

我沒有把它們放在WEB-INF中,實際上如果你檢查我在Maven War Plugin上共享的鏈接,它會將圖像,css文件等包裝到WEB-INF/classes目錄中。這是推薦的結構。 –

回答

2

如果你想通過HTTP訪問這些資源,他們必須其他地方 - 都不能在WEB-INF。這個問題是重複的,因爲它已被其他地方多次回答(只是查詢這個問題的相關問題鏈接)。 Java web應用程序從不通過HTTP訪問WEB-INF下的任何資源。但是,由於您的問題是關於「推薦」標準文件結構,請告訴您,您鏈接的文檔在哪裏容易引起誤解:src/main/resources中的任何資源都將在類路徑中結束,例如,在WEB-INF /類中。它不會以Web應用程序向全世界提供的目錄結束。但是,文檔使用圖像,這表明圖像可以在Web應用程序中使用。它不能。您可以通過類加載器訪問它,例如:SomeClassFromYourWebapp.class.getResourceAsStream()。這更典型地通過.properties文件,.xml或類似的在運行時處理而不是在圖像上處理。真正誤導性的文檔我會說(但它是正確的,只是誤導)

從技術上講,這將回答你的問題,「我如何從JSP訪問資源?」,因爲你可以在JSP中有這個代碼。我相信你的問題是要求通過HTTP解決資源問題。

而且答案是:移動,你需要可通過HTTP src/main/webapp的資源和使他們擺脫WEB-INF。否則,他們只會在類路徑上。

+0

這就是說,把資源放在WEB-INF或類路徑中並且從這裏爲http服務是相當普遍的。例如,Spring爲jsp做了這個工作。 – user2189998

+1

@ user2189998 for jsp:是的。然而,你永遠無法將它們當作/WEB-INF/index.jsp(就像這個答案中的點)一樣,但是你需要內部重定向魔術。即使(理論上)可能,我從來沒有看到它爲CSS和圖像做過。如果你需要的只是一個帶有URL的資源,那就太麻煩了。 –

+0

Olaf Kock如你所說,當我將它移動到src/main/webapp時,它確實有效。 –