2016-03-01 93 views
-1

我使用的是webapp的標準maven原型,所以我把我的圖像文件夾放在src/main/resources目錄下,並放在war包中,它位於WEB-INF/classes /目錄下。Spring mvc + maven:無法訪問圖像

我的項目樹如下圖enter image description here

所以圖像目錄是在classpath中,我通過的getResource

final String path ="/resources/images/disegno.svg"; 
URL imagePath = this.getClass().getClassLoader().getResource(path); 

加載它,但我得到

Could not complete request 
java.lang.NullPointerException 

聲明時path 也在.jsp中,我嘗試以這種方式訪問​​圖像:

<img src="<%=request.getContextPath() %>/WEB-INF/classes/images/disegno.svg"/> 

但不顯示圖像,即使它鏈接到

http://localhost:8080/svgTest/WEB-INF/classes/images/disegno.svg 

我不明白在這種情況下如何Maven的作品,並不能找到一個完整的指南,因爲到處都看起來那麼容易,所以我不知道我在做什麼錯誤...

+0

可能的重複http://stackoverflow.com/questions/3803326/this-getclass-getclassloader-getresource-and-nullpointerexception? –

回答

1

你犯了3個錯誤。

第一個:ClassLoader.getResource()預計路徑不會以/開頭。

第二:源項目中的src/main/resources下的內容位於classpath的根目錄下。沒有resources包,因爲您的WEB-INF /類的屏幕截圖顯示。所以,你的路徑應該是

this.getClass().getClassLoader().getResource("images/disegno.svg") 

三:設計,一切UNDEX WEB-INF無法從瀏覽器訪問。所有的WEB-INF都是。因此,如果您希望瀏覽器能夠下載您的圖像,它應該位於src/main/webapp文件夾中,而不是src/main/resources。在源代碼中,一旦它存在,你將無法再使用ClassLoader加載它,因爲它不會再在類路徑中。如果您需要加載它,並直接使用瀏覽器,請使用ServletContext.getResource()