如何在weblogic 12c中将动态图像作为servletoutputstream的一部分发送

时间:2014-04-12 00:26:02

标签: java servlets weblogic12c

我必须发送通过BufferedImage和imageIO.write生成的动态图像。 byteArray被写入httpsevletresponse的servletoutputstream。 content-type设置为image / jpeg,在httpsevletresponse对象中将encoding设置为utf-8。

但是当sevletOutputStream.write(b)时,我收到了java.nio.charset.MalFormedInputException:输入长度:1

我是否需要将编码设置为utf-16。

这个错误来自weblogic 12c服务器,只有jdk 1.7.0_45。

相同的代码正在其他应用程序服务器以及tomcat上运行

StackTrace:异常跟踪如下

<captchaBytes=[B@26e5c86e>  
  java.nio.charset.MalformedInputException: Input length = 1> 
<at java.nio.charset.CoderResult.throwException(CoderResult.java:277)> 
<at weblogic.servlet.internal.CharChunkOutput.write(CharChunkOutput.java:116)>
<at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:148)>
<at weblogic.servlet.jsp.BodyOutputStream.write(NestedBodyResponse.java:54)>
<at java.io.OutputStream.write(OutputStream.java:75)>

代码段:

Byte[] imageBytes = get image byte from backend using ImageIO.write
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream out;
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setCharacterEncoding("UTF-8");
out = httpServletResponse.getOutputStream();
out.flush();
out.write(imageBytes);  \\ Error Occured here

1 个答案:

答案 0 :(得分:0)

在致电httpServletRequest.resetBuffer()之前添加out = httpServletResponse.getOutputStream()解决了此问题。抛出了MalformedInputException,因为生成图像的JSP作为图像标记src中其他jsp的一部分包含在内。