Java ServletContext#getResource()将WEB-INF中的JPEG文件返回为null
你好 我正在尝试将web应用程序中包含的JPG文件输出到 使用以下代码的用户:Java ServletContext#getResource()将WEB-INF中的JPEG文件返回为null,java,servlets,Java,Servlets,你好 我正在尝试将web应用程序中包含的JPG文件输出到 使用以下代码的用户: public class JpegOutput extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte bufferArray[] =
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
谢谢。您可以使用
getServletContext().getRealPath(“/”
获取/WEB-INF/
的路径。例如
String path = getServletContext().getRealPath("/") + "WEB-INF/image/image1.jpg";
InputStream is = new FileInputStream(path);
虽然不确定这是否是NPE的原因。您可以检查日志文件并发布堆栈跟踪吗?您可以使用
getServletContext().getRealPath(“/”
来获取/WEB-INF/
的路径。例如
String path = getServletContext().getRealPath("/") + "WEB-INF/image/image1.jpg";
InputStream is = new FileInputStream(path);
虽然不确定这是否是NPE的原因。您能检查日志文件并发布stacktrace吗?不确定是否有错误,但我认为最好转发请求,而不是手动提供图像:
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);
不确定是否有错误,但我认为最好转发请求,而不是手动提供图像:
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);
这张图片不在公共网络内容中有什么原因吗?那么你就不需要servlet了。如果你想有一天成为一名优秀的程序员(如你的个人资料中所述),你真的必须回答上面的评论:)这段代码闻起来太多了。@BalusC我只是在研究可能性。我不打算那样使用它。我只是个初学者。。我在一本书中读过它,所以我试着做代码。:)这张图片不在公共网络内容中有什么原因吗?那么你就不需要servlet了。如果你想有一天成为一名优秀的程序员(如你的个人资料中所述),你真的必须回答上面的评论:)这段代码闻起来太多了。@BalusC我只是在研究可能性。我不打算那样使用它。我只是个初学者。。我在一本书中读过它,所以我试着做代码。:)
ServletContext.getResource()
不适用于类路径,其用法正确。True,我的错误,将其与Class.getResource()混合使用。ServletContext.getResource()
不适用于类路径,其用法正确。True,我的错误,将其与Class.getResource()混合使用。