从 doPost() 方法访问保存在 Servlet 的 WEB-INF 文件夹中的静态文件

Access a static file saved inside the WEB-INF folder of a Servlet from the doPost() method

我正在尝试访问我保存在 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();
}

Movieclass: 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() 使用*class 加载器** 加载资源。因此它会在 class 路径 中寻找它们。网络应用程序的 class 路径由 WEB-INF/classesWEB-INF/lib 中的所有 jar 组成。它期望的路径类似于 com/mycompany/myproject/somefile.txt。它不能是 HTTP URL。

你需要的是ServletContext.getResourceAsStream("/WEB-INF/imgs/cardbackground1.jpg")。此方法从网络应用程序内的任何位置加载资源。