gpt4 book ai didi

java - jsp中的动态图像

转载 作者:行者123 更新时间:2023-12-01 07:35:16 26 4
gpt4 key购买 nike

我尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com