一个彩色验证码的程序,我把它应用到具体的地方的运行该页面的时候,在myeclipse的控制台会打印如下异常:
Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:610)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)
at org.apache.jsp.makeCertPic_jsp._jspService(makeCertPic_jsp.java:79)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)请问这个是什么意思呀???
     如果大家还需要详细点的代码的话,给我留言哈。
  谢谢大家啦

解决方案 »

  1.   

    getOutputStream() has already been called for this response 你的代码的问题
      

  2.   

    java.lang.IllegalStateException: getOutputStream() has already been called for this response 无效的状态:getOutputStream() 方法中存在调用了response
      

  3.   

    源代码:
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Random;
    import javax.imageio.ImageIO;public class CopyOfMakeCertPic {
        
        private char mapTable[]={
         'a','b','c','d','e','f',
         'g','h','i','j','k','l',
         'm','n','o','p','q','r',
         's','t','u','v','w','x',
         'y','z','0','1','2','3',
         '4','5','6','7','8','9'};
        
        public String getCertPic(int width, int height, OutputStream os) {
    if(width<=0)width=60;
    if(height<=0)height=20;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    Graphics g = image.getGraphics(); 
    g.setColor(new Color(0xDCDCDC)); 
    g.fillRect(0, 0, width, height); 
    g.setColor(Color.black); 
    g.drawRect(0,0,width-1,height-1); 
    String strEnsure = "";
    for(int i=0; i<4; ++i) {
    strEnsure += mapTable[(int)(mapTable.length*Math.random())];
    }
    g.setColor(Color.black); 
    g.setFont(new Font("Atlantic Inline",Font.PLAIN,18)); 
    String str = strEnsure.substring(0,1); 
    g.drawString(str,8,17); 
    str = strEnsure.substring(1,2); 
    g.drawString(str,20,15); 
    str = strEnsure.substring(2,3); 
    g.drawString(str,35,18); 
    str = strEnsure.substring(3,4); 
    g.drawString(str,45,15); 
    Random rand = new Random();
    for (int i=0;i<10;i++) { 
    int x = rand.nextInt(width); 
    int y = rand.nextInt(height); 
    g.drawOval(x,y,1,1); 

    g.dispose(); 
    try {
    ImageIO.write(image, "JPEG", os);
    } catch (IOException e) {
    return "";
    }
    return strEnsure;
    }
    }
    一个jsp页面
    <%@page contentType="image/jpeg" %>
    <jsp:useBean id="image" scope="page" class="com.caipu.commons.MakeCertPic" />
    <%
    String str = image.getCertPic(0,0,response.getOutputStream());
    session.setAttribute("certCode", str); 
    %>
    然后在另外一个页面调用能成功,就是每次刷新一次页面就会出现一个上面的异常
       大家都说是代码的问题
      就麻烦高人们找找看是什么地方的问题啦
       谢谢!