java - jsp中的动态图像

标签 java image spring spring-mvc

我尝试使用 Spring mvc Controller 以动态方式生成图像。

@Controller
@RequestMapping("/")
public String generateMik(final HttpServletResponse response){
...
BufferdImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
...

response.setContentType("image/png");
try {
    OutputStream os = response.getOutputStream();
    ImageIO.write(buffer, "png", os);
    os.flush();
    os.close();
...
}

我在 .jsp 中显示这张图片:

<img src="picture" id="picture">

一切正常,图片显示在我的浏览器中,但我遇到了异常,并且我不知道如何正常解决此问题(我不想捕获此异常)。

org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:626)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:215)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
...

我的问题是:如何以可能简单的方式生成动态图片?我不想临时保存图片。也许放入模型outputStream并在jsp中以某种神奇的方式显示?

最佳答案

您需要使用@ResponseBody注释将图像写入流的@RequestMapping方法,以告诉Spring MVC不要尝试查找要使用的 View 呈现响应。您可以在自己处理写入输出流的任何方法上使用 @ResponseBody

由于您的@RequestMapping方法返回一个String,Spring将您的方法的响应值解释为它在渲染响应时应该使用的 View 的名称。

您看到异常是因为您正在写入(并关闭)响应流,然后 Spring MVC 尝试调用 View 类来写入相同的响应流。

关于java - jsp中的动态图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957990/

相关文章:

java - 是否有用于 java 的 Backgroundworker(例如在 .Net 中)

java - 如何将源代码链接到 eclipse 中的 jar 包?

java - Android - 以线性布局显示 WebView

spring - grails 3 约束异常

java - Spring Boot 在 WebSocket 上使用 Stomp : Handshake failed due to invalid Upgrade header: null

java - 处理多种表单,Spring

java - 使用 session 作用域 Bean

.net - 大型图像调整大小库

Java创建具有浮点精度的BufferedImage

php - 空 _FILES 变量