【发布时间】:2015-07-29 23:28:33
【问题描述】:
我正在尝试访问我保存在 src/main/webapp/WEB-INF/imgs 文件夹中的 Servlet 中的一些图像,方法是:
link
我尝试在我的Servlet 的doPost 方法中使用此代码访问这些图像:
InputStream s = this.getClass().getClassLoader().getResourceAsStream("http://cardimgs.org/imgs/cardbackground1.jpg");
Movie movie = new Movie();
try {
byte[] bytes = IOUtils.toByteArray(s);
movie.setImage(bytes);
} catch (IOException e) {
e.printStackTrace();
}
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
// Store the image in App Engine's datastore
pm.makePersistent(movie);
} finally {
pm.close();
}
Movie 类:
link 2,
我之所以使用指定的url来创建InputStream是因为在我的appengine-web.xml中我有:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>myApplicationId</application>
<version>1</version>
<threadsafe>true</threadsafe>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
</system-properties>
<static-files>
<include path="/**.jpg"/>
<include path="/imgs" >
<http-header name="Access-Control-Allow-Origin" value="http://cardimgs.org" />
</include>
</static-files>
</appengine-web-app>
我尝试在其中定义我的静态文件。
我的问题是,但是,使用上面的代码我无法访问我的文件并填写InputStream,这似乎是null,因此返回NullPointerException。
如何成功访问我的静态文件?
【问题讨论】:
-
阅读 ClassLoader.getResourceAsStream() 的 javadoc:它使用 类加载器 加载资源。因此,它会在 类路径 中查找它们。类路径由 WEB-INF/classes 和 WEB-INF/lib 中的所有 jar 组成。它期望的路径看起来像
com/mycompany/myproject/somefile.txt。它不能是 http URL。你需要的是 ServletContext.getResourceAsStream("/WEB-INF/imgs/cardbackground1.jpg") -
好的,我已经尝试过这种方式:
InputStream s = this.getClass().getClassLoader().getResourceAsStream("/WEB-INF/imgs/cardbackground1.jpg");但没有用。<include path>属性是否仍然重要?无论如何我已经更新了它:<static-files> <include path="WEB-INF/imgs/*.jpg"/></static-files> -
它不起作用,因为正如我在之前的评论中所说,类路径不包含您的 web 应用程序的根目录。它包含 WEB-INF/classes 和 WEB-INF/lib 中的所有 jars。因此,正如我在之前的评论中所说,您需要 ServletContext.getResourceAsStream("/WEB-INF/imgs/cardbackground1.jpg")。
-
很好!!谢谢...不过,您还没有添加答案。如果你愿意,我会接受。 ;)
标签: image google-app-engine servlets blob