tomcat5下jsp出现getOutputStream() has already been called for ......

转载 2007年09月23日 14:39:00

tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),
没有妥善处理好的原因。
具体的原因就是
在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后
有一段这样的代码
finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    }
这里是在释放在jsp中使用的对象,会调用response.getWriter(),因为这个方法是和
response.getOutputStream()相冲突的!所以会出现以上这个异常。

然后当然是要提出解决的办法,其实挺简单的(并不是和某些朋友说的那样--
将jsp内的所有空格和回车符号所有都删除掉),

在使用完输出流以后调用以下两行代码即可:
out.clear();
out = pageContext.pushBody();

最后这里是一个输出彩色验证码例子(这样的例子几乎随处可见)
imag.jsp

<%@ page  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
<%@ page import="java.io.OutputStream" %>
<%!
Color getRandColor(int fc,int bc){
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
try{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
OutputStream os=response.getOutputStream();
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(getRandColor(160,200));
for (int i=0;i<155>
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
String sRand="";
for (int i=0;i<4>
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*i+6,16);
}
session.setAttribute("rand",sRand);
g.dispose();

ImageIO.write(image, "JPEG",os);
os.flush();
os.close();
os=null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
}
catch(IllegalStateException e)
{
System.out.println(e.getMessage());
e.printStackTrace();
}%>

 

相关文章推荐

tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等), 没有妥善处理好的原因。 具体的原因就是 在tomcat中jsp编译成servlet之后在函数...

Java读取数据库Blob对象返回到JSP页面和getOutputStream() has already been called for this response异常处理

Insert title here
  • del1214
  • del1214
  • 2011年07月22日 11:26
  • 1650

jsp 验证码异常:getOutputStream() has already been called for this response 的解决方法

今天在第一次接触使用“验证码”功能时,在执行时出现了异常信息:     严重: Servlet.service() for servlet jsp threw exception     ja...

getOutputStream() has already been called for this response异常出现的原因和解决方法

文章分类:Java编程getOutputStream() has already been called for this response异常出现的原因和解决方法:jsp中出现此错误一般都是在jsp...

Str问题java.lang.IllegalStateException: getOutputStream() has already been called for this response的解决

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, ...

转异常getOutputStream() has already been called for this response

getOutputStream() has already been called for this response 这个错误遇到过不少次,网上看到大多不能解决问题。     下面两点是我自己总结...

常见的getOutputStream() has already been called for this response

异常原因:  response.getWriter()和response.getOutputStream相冲突引起的。jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),...

getOutputStream() has already been called for this response

下面两点是我自己总结出来的:     1、在我们应用验证码时,都会用到字节流response.getOutputStream()来将验证码输出,但是jsp页面自己最后会调用字符流JspWriter的...

getOutputStream() has already been called for this response异常的原因和解决方法

转自http://blog.csdn.net/iron_wang/article/details/4204672 1.tomcat5下jsp出现getOutputStream() has alrea...

java日常问题之excel文件下载功能中getOutputStream() has already been called for this response

java日常问题之excel文件下载功能中getOutputStream() has already been called for this response...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: tomcat5下jsp出现getOutputStream() has already been called for ......
举报原因:
原因补充:

(最多只允许输入30个字)