WEB-INF中的JPEG文件由ServletContext返回为null#getResource()

时间:2011-02-28 16:48:49

标签: java servlets

美好的一天!

我正在尝试将Web应用程序中包含的JPG文件输出到 用户使用以下代码:

public class JpegOutput extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        byte bufferArray[] = new byte[1024];
        ServletContext ctxt = getServletContext();

        response.setContentType("image/jpeg");
        ServletOutputStream os = response.getOutputStream();
        InputStream is = ctxt.getResource("/WEB-INF/image/image1.jpg").openStream();
        int read = is.read(bufferArray);
        while (read != 1) {
            os.write(bufferArray);
            read = is.read(bufferArray);
        }
        is.close();
        os.close();
    }
}

但是出现错误:

HTTP Status 500 -
exception java.lang.NullPointerException

我不确定它是否无法读取源图像或其他内容。无论如何,我把图像放在这个文件夹/WEB-INF/image/image1.jpg

我做错了什么?我该如何解决这个问题?

编辑:我通过重命名文件名来解决问题...文件名区分大小写,而不是image1.jpg,它应该是image1.JPG

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用getServletContext().getRealPath("/")获取/WEB-INF/的路径。 E.g。

String path = getServletContext().getRealPath("/") + "WEB-INF/image/image1.jpg";
InputStream is = new FileInputStream(path);

虽然不确定这是NPE的原因。你能检查一下日志文件并发布堆栈跟踪吗?

答案 1 :(得分:0)

不确定错误,但我认为最好转发请求而不是手动提供图片:

public class JpegOutput extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/image/image1.jpg")
            .forward(request, response);
    }
}

另请注意,内容服务循环不正确,正确的循环如下所示:

while ((read = is.read(bufferArray)) != -1)
    os.write(bufferArray, 0, read);