2016-03-01 47 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()