美好的一天!
我正在尝试将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
谢谢。
答案 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);