Posted on 2010-04-22 11:57
leekiang 阅读(372)
评论(0) 编辑 收藏 所属分类:
jsp,servlet
今天做一个jsp的验证码程序,把验证码的绘制写在一个jsp里,发现在调用时总是出现getOutputStream() has already
been called for this response异常,搞得一头雾水,看似自己重复调用了,因为在程序最后是这样输出的
ImageIO.write(image, “JPEG”, response.getOutputStream());
但是仔细检查了程序,并没有问题,不过最后还是解决了,问题出在%>与<%之间的空行,把换行都去掉就OK了。
因为Application
Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,而你却要进行流输
出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,就会发生getOutputStream()
has already been called for this response的错误
详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270
而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件
下载下来的文件中就会多出一些换行符0×0d和0×0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。