<%@ page autoFlush="false" import="java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*"%> <%@ page import="com.yourcompany.util.RandomStringUtils"%> <% RandomStringUtils rs=new RandomStringUtils(); String random=rs.randomAlphanumeric(4); session.setAttribute("random",random); %> <% out.clear(); response.setContentType("image/jpeg"); response.addHeader("pragma","NO-cache"); response.addHeader("Cache-Control","no-cache"); response.addDateHeader("Expries",0); int width=100, height=40; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setColor(Color.GRAY); Font DeFont=new Font("SansSerif", Font.PLAIN, 32); g.setFont(DeFont); g.fillRect(0, 0, width, height); g.setColor(Color.RED); g.drawString(random,3,30); g.dispose(); ServletOutputStream outStream = response.getOutputStream(); JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream); encoder.encode(image); outStream.close(); %>
麻烦高手看下, 为什么上面的jsp 会发生下面异常
java.lang.IllegalStateException: getOutputStream() has already been called for this response
我发网上的许多关于验证码的代码都是如此,
------解决方法--------------------------------------------------------
不知道lz的tomcat是什么版本的,如果是5或5以下的会有这样的问题,换个高版本的就好了
还有就是注意流的关闭。
------解决方法--------------------------------------------------------
在jsp中BufferedImage 有的时候会有这样的问题,但多数提高了tomcat版本都会好的。
------解决方法--------------------------------------------------------
资源用完了,能释放的都释放掉。
------解决方法--------------------------------------------------------
out应该就是jsp的内置对象,表示response的outputstream
试试:JPEGCodec.createJPEGEncoder(out);
------解决方法--------------------------------------------------------
http://hwangita.blog.ccidnet.com/blog-htm-do-showone-uid-45279-type-blog-itemid-183837.html
参考下
------解决方法--------------------------------------------------------
ServletOutputStream outStream = response.getOutputStream();
在jsp中已经隐含打开了输出流PrintWriter,不妨从这个流中得到字节流