【问题标题】:Access a static file saved inside the WEB-INF folder of a Servlet from the doPost() method从 doPost() 方法访问保存在 Servlet 的 WEB-INF 文件夹中的静态文件
【发布时间】:2015-07-29 23:28:33
【问题描述】:

我正在尝试访问我保存在 src/main/webapp/WEB-INF/imgs 文件夹中的 Servlet 中的一些图像,方法是: link

我尝试在我的ServletdoPost 方法中使用此代码访问这些图像:

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"); 但没有用。 &lt;include path&gt; 属性是否仍然重要?无论如何我已经更新了它:&lt;static-files&gt; &lt;include path="WEB-INF/imgs/*.jpg"/&gt;&lt;/static-files&gt;
  • 它不起作用,因为正如我在之前的评论中所说,类路径不包含您的 web 应用程序的根目录。它包含 WEB-INF/classes 和 WEB-INF/lib 中的所有 jars。因此,正如我在之前的评论中所说,您需要 ServletContext.getResourceAsStream("/WEB-INF/imgs/cardbackground1.jpg")。
  • 很好!!谢谢...不过,您还没有添加答案。如果你愿意,我会接受。 ;)

标签: image google-app-engine servlets blob


【解决方案1】:

ClassLoader.getResourceAsStream() 使用*类加载器**加载资源。因此,它会在 类路径 中查找它们。 Web 应用程序的类路径由WEB-INF/classesWEB-INF/lib 中的所有jar 组成。它期望的路径看起来像 com/mycompany/myproject/somefile.txt。它不能是 HTTP URL。

您需要的是ServletContext.getResourceAsStream("/WEB-INF/imgs/cardbackground1.jpg")。此方法从 web-app 内的任何位置加载资源。

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 2016-04-05
    • 2014-08-17
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多