【发布时间】:2017-10-21 21:09:45
【问题描述】:
我正在尝试使用 servlet 输出图像。这是我的代码:
@WebServlet(name = "PhoneImageServlet", urlPatterns = {"/image/phone"})
public class PhoneImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try (InputStream in = getClass().getClassLoader().getResourceAsStream("/images/phone.png");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream())) {
response.setContentType("image/png");
int ch=0;
while ((ch=br.read()) != -1) {
out.write(ch);
}
}
}
}
但这是我尝试用浏览器打开图片时的结果: enter image description here
你知道问题出在哪里吗?
顺便说一句,如果我使用绝对 URL 在我的硬盘驱动器中图像,代码的工作方式。当我将图像移动到 .war 文件时,问题就开始了。
---------- 编辑 -----------
我根据 Stephen C 的回答更改了我的代码,现在可以使用了!
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/png");
try (InputStream is = getClass().getClassLoader().getResourceAsStream("/images/phone.png");
BufferedInputStream in = new BufferedInputStream(is);
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream())) {
byte[] buffer = new byte[1024];
while ((in.read(buffer)) != -1) {
out.write(buffer);
}
}
}
【问题讨论】: