首先,JSP 是一种视图技术,提供用于编写 HTML/CSS/JS 的模板以及与后端 Java 代码交互以控制页面流和访问后端数据的能力。你的问题更多是在 HTML 中。
现在,要在 HTML 页面中显示图像,您需要 HTML <img> 元素。要定义/分配图像,您只需让src 属性指向一个 URL。例如
<img src="url/to/image.jpg" />
(它可以是相对于当前上下文的,也可以是绝对 URL,例如以 http:// 开头)
如果图像是动态的,就像您的情况一样,您需要有一个 Servlet 来侦听与图像 URL 匹配的 url-pattern。例如
<img src="imageservlet/image.jpg" />
(这里的 servlet 显然要映射到/imageservlet/* 的 URL 模式上,而图像标识符,这里是文件名,可以通过 request.getPathInfo() 获得)
<img src> 将触发 GET 请求,因此您只需实现 servlet 的 doGet() 方法。要发送 HTTP 响应,您只需将一些内容写入响应的OutputStream,以及一组表示内容的响应标头(Content-Type、Content-Length 和/或Content-disposition)。您可以使用ImageIO#write() 将BufferedImage 写入OutputStream。
您可以找到此类图像 servlet here 的基本示例。您只需将Files#copy() 替换为ImageIO#write()。
response.setContentType("image/png");
ImageIO.write(bufferedImage, "png", response.getOutputStream());
作为一种完全不同的选择,您还可以让 servlet 将图像转换为 Base64 编码的字符串并将其传递给 JSP:
ByteArrayOutputStream output = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", output);
String imageAsBase64 = Base64.getEncoder().encodeToString(output.toByteArray());
request.setAttribute("imageAsBase64", imageAsBase64);
request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);
最后使用data URI scheme在转发的JSP中显示如下:
<img src="data:image/png;base64,${imageAsBase64}" />
您只需要记住,这不会给服务器或客户端缓存图像的机会。因此,如果图像不是临时的,这种方法效率很低。
另见: