现在的系统中经常会有验证码这个功能,方式经常为向页面输出一个包含动态内容的图片,所以在JSP中不可避免的会使用ImageIO.write(image, "bmp", response.getOutputStream()); 来实现这个功能。可是我们发现,系统在运行的过程当中,会发生如下异常: java.lang.IllegalStateException: getOutputStream() has already
在于JSP页面释放资源的时候,会调用ServetResponse.getWriter()方法,查看Servlet的API中的getWriter()方法,看到如下内容:Either this method or getOutputStream() may be called to write the body, not both。所以原因在于两次调用同一个response对象的getOutputStream()方法。
解决办法如下:
ImageIO.write(image, "bmp", response.getOutputStream());
out.clear(); //清空缓存内容
out = pageContext.putshBody();//返回一个新的BodyContent