<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-153  評論-235  文章-19  trackbacks-0

    【標  題】:tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法
    【關鍵字】:tomcat5,jsp,getOutputStream,has,already,been,called,for,this,response
    【來  源】:http://blog.csdn.net/alexwan/archive/2007/02/13/1508871.aspx

    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 ;i ++ )
    {
    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 ;i ++ ){
    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();
    }
    %>

     

    posted on 2007-03-19 12:57 流浪汗 閱讀(6618) 評論(7)  編輯  收藏 所屬分類: Tomcat

    評論:
    # re: tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法[未登錄] 2007-05-26 13:47 | xiaoquan
    多謝樓上的指點!我遇到這個問題已經解決!  回復  更多評論
      
    # re: tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法 2007-12-25 18:14 | yangweiwei.china@hotmail.com
    我遇到這個問題了。但是你的解決方案中
    out.clear();
    out = pageContext.pushBody();
    這兩行代碼是寫在JSP中的
    我用Action類實現的生成Excel文件,在JAVA類中怎么解決這個問題?
    謝謝!
    我的MSN:yangweiwei.china@hotmail.com
    因為很急,在線等待  回復  更多評論
      
    # re: tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法 2007-12-26 10:06 | 流浪汗
    在Action更加容易解決。
    直接把response.getOutputStream()作參數傳給寫Excel的方法或類。在Action里return null;就行了。

    記得Action方法一開始加
    response.addHeader("Content-Disposition","attachment;filename=your_file_name.xls");
      回復  更多評論
      
    # re: tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法 2008-03-07 23:22 | bb
    ddddddddddddddddddddddddddddddddddddddddddd  回復  更多評論
      
    # re: tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法 2008-06-17 10:51 | 桐花一瞬 ziding1999@hotmail.com
    我也遇到了此問題,但加入那兩句代碼后,out是哪個包中的?  回復  更多評論
      
    # re: tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法 2008-06-22 23:28 | 流浪汗
    @桐花一瞬 ziding1999@hotmail.com
    out是jsp自有的  回復  更多評論
      
    # re: tomcat5下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法 2009-10-31 09:14 | zxb
    我是在action里面調用的呀  回復  更多評論
      
    主站蜘蛛池模板: 亚洲AV色欲色欲WWW| 久久久久国产精品免费网站| 日韩欧毛片免费视频| 中文字幕精品亚洲无线码一区 | 午夜在线免费视频| 啦啦啦中文在线观看电视剧免费版 | 国产色爽女小说免费看| 亚洲卡一卡2卡三卡4卡无卡三| 免费在线观看自拍性爱视频| 国拍在线精品视频免费观看| 国产亚洲成AV人片在线观黄桃| 久久久久亚洲精品无码网址色欲| 国产在线jyzzjyzz免费麻豆| 亚洲色成人中文字幕网站| 美女羞羞免费视频网站| 最近最新MV在线观看免费高清| 亚洲AV成人一区二区三区AV| 无码毛片一区二区三区视频免费播放 | 亚洲AV无码男人的天堂| 波多野结衣免费在线观看| 亚洲AV人无码综合在线观看| 黄色网页在线免费观看| 国产v片免费播放| 亚洲影院天堂中文av色| 中文字幕无码播放免费| 久久综合亚洲色HEZYO社区| 你懂的网址免费国产| 亚洲中文字幕无码专区| 美女露100%胸无遮挡免费观看| 国内一级一级毛片a免费| 自拍日韩亚洲一区在线| 久久九九兔免费精品6| 亚洲小视频在线观看| 国产成人AV片无码免费| 亚洲国产精彩中文乱码AV| 中国人免费观看高清在线观看二区| MM131亚洲国产美女久久| 日韩在线视频免费| 亚洲电影日韩精品| 免费高清A级毛片在线播放| 国产一级做a爱免费视频|