我必须发送通过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
答案 0 :(得分:0)
在致电httpServletRequest.resetBuffer()
之前添加out = httpServletResponse.getOutputStream()
解决了此问题。抛出了MalformedInputException
,因为生成图像的JSP作为图像标记src中其他jsp的一部分包含在内。