Jboss7.1如何从java代码加载图片等资源?
这曾经与 Jboss4 一起工作:
this.getClass().getClassLoader().getResourceAsStream("/myapp/includes/images/image1.png");
现在返回 null。
现在使用 Jboss7 在 java 代码中加载资源的最佳实践是什么?
我做了一些测试:
URL url = this.getClass().getResource("");
System.out.println(url);
url = this.getClass().getResource("../../../");
System.out.println(url);
url = this.getClass().getResource("../../../../");
System.out.println(url);
url = this.getClass().getResource("../../../../../");
System.out.println(url);
url = this.getClass().getResource("includes");
System.out.println(url);
13:33:49,143 INFO [stdout] (http--127.0.0.1-8080-1) vfs:/C:/Eclipse/apps/jboss-as-7.1.1.Final/standalone/deployments/my-ea.ear/my-web.war/WEB-INF/classes/com/xxx/yyy/beans/jsf/
13:33:49,144 INFO [stdout] (http--127.0.0.1-8080-1) vfs:/C:/Eclipse/apps/jboss-as-7.1.1.Final/standalone/deployments/my-ea.ear/my-web.war/WEB-INF/classes/com/xxx/
13:33:49,150 INFO [stdout] (http--127.0.0.1-8080-1) jar:file:/C:/Eclipse/apps/jboss-as-7.1.1.Final/modules/javax/activation/api/main/activation-1.1.1.jar!/com/
13:33:49,151 INFO [stdout] (http--127.0.0.1-8080-1) file:/C:/Eclipse/apps/jboss-as-7.1.1.Final/modules/sun/jdk/main/service-loader-resources/
13:33:49,152 INFO [stdout] (http--127.0.0.1-8080-1) null
最佳答案
this.getClass().getClassLoader().getResourceAsStream("path")
方法正在处理类路径根目录中的路径。在 WAR 中,这通常是 WEB-INF/classes
和 WEB-INF/lib
。
您的路径 WebContent/includes/images/
似乎在您的 WAR 文件的根目录中(不是类路径)。这样你就可以
- 使用
ServletContext
的getResourceAsStream
(参见 here)处理 WAR 文件根目录的路径。 - 将所有图像打包到一个额外的 JAR 中(例如
my-app.resources.jar
)并使用ClassLoader.getResourceAsStream()
- 在类路径中移动您的图像(见上文)。
关于java - 使用 Jboss7 加载资源返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10833046/