亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

tomcat6下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法

2024-09-05 00:22:33
字體:
來源:轉載
供稿:網友
這篇文章主要介紹tomcat6下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法,需要的朋友可以參考下。
 

1.在tomcat6.0下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法

  在tomcat6.0下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 j=0;j<4;j++){      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*j+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();  }%>

  如有不足之處,歡迎斧正!

2.getOutputStream() has already been called for this response問題的解決

  在jsp向頁面輸出圖片的時候,使用response.getOutputStream()會有這樣的提示:java.lang.IllegalStateException:getOutputStream() has already been called for this response,會拋出Exception

  原因一:
  JSP默認的輸出流為PrintWriter ,即<% %>以外的東西所默認的輸出方式,如果你嘗試在JSP中使用ServletOutputStream就會引起錯誤.要嘛直接改用Servlet輸出(復寫service方法),要嘛刪除除%><%中的任何東西(包括HTML標簽,空格,回車等東西)應該就可以。對于這樣的情況應該這樣來解決,刪除%><%之間的所有內容包括空格和換行符,最后也要消除空格和換行符,最好再加上一句response.reset()。

  原因二: 

  在J2EE的API參考里有這么個:

  ServletResponse的getWriter()方法里會拋出這個異常:

    IllegalStateException - if the getOutputStream method has already been called for this response object

  而它的getOutputStream()方法里會拋出這個異常:

    IllegalStateException - if the getOutputStream method has already been called for this response object

  并且兩者的函數申明里都有這么樣的一句

    Either this method or getOutputStream() may be called to write the body, not both.
    Either this method or getWriter() may be called to write the body, not both.


  以上說明也解釋了為什么在往頁面中寫入圖片的時候要使用如下循環格式

 

復制代碼代碼如下:
OutputStream output=response.getOutputStream();
while((len=in.read(b)) >0) {
  output.write(b,0,len);
}
output.flush();

而不是把response.getOutputStream().write()放到循環體內

 

在頁面中直接寫:

復制代碼代碼如下:
<body bgcolor="#ffffff">
<h1>
<%
    response.getOutputStream();
%>
</h1>
</body>

 

將會出現錯誤消息如下:

java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.catalina.connector.Response.getWriter(Response.java:604)
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)

以上就是tomcat6下jsp出現getOutputStream() has already been called for this response異常的原因和解決方法的全部內容,希望能給大家一個參考,也希望大家多多支持VeVb武林網。



注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频精品自拍| 国产91色在线|| 疯狂做受xxxx欧美肥白少妇| 午夜精品一区二区三区在线播放| 欧美一区二区大胆人体摄影专业网站| 欧美日韩精品在线视频| 久久天天躁狠狠躁夜夜躁| 亚洲国产欧美一区二区三区同亚洲| 国产亚洲成精品久久| 午夜精品三级视频福利| 91精品久久久久久久| 亚洲第一中文字幕在线观看| 色久欧美在线视频观看| 久久久av免费| 欧美性少妇18aaaa视频| 欧美综合第一页| 欧美日韩成人免费| 久久成人亚洲精品| 色婷婷综合久久久久| 狠狠躁夜夜躁久久躁别揉| 清纯唯美亚洲激情| 亚洲第一页中文字幕| 国产成人精品视| 亚洲国产精品va在线| 中文字幕亚洲激情| 亚洲国产欧美一区二区三区同亚洲| 精品久久久久久电影| 日韩av影视在线| 欧美成年人视频网站| 久久精品成人动漫| 浅井舞香一区二区| 国产91网红主播在线观看| 亚洲一区二区久久久久久| 国产午夜精品美女视频明星a级| 国产一区二区三区视频在线观看| 精品视频久久久久久久| 欧美日韩美女在线| 欧美精品在线视频观看| 日韩激情在线视频| 欧美日韩在线免费观看| 黄色一区二区在线| 91网站在线免费观看| 国产噜噜噜噜久久久久久久久| 国产精品午夜视频| 欧美成人精品不卡视频在线观看| 国产一区二区丝袜高跟鞋图片| 国产精品久久二区| 欧美日韩一区二区免费在线观看| 高清欧美性猛交xxxx| 国产精品美女免费视频| 国产美女高潮久久白浆| 亚洲天堂男人天堂女人天堂| 亚洲成人精品久久| 欧美成人免费观看| 91精品国产91久久久久久吃药| 久久久免费在线观看| 亚洲美女又黄又爽在线观看| 欧美性xxxx| 欧美日韩精品在线视频| 最近2019中文字幕第三页视频| 成人网在线免费观看| 日韩欧美aaa| 97福利一区二区| 亚洲欧美另类人妖| 亚洲美女免费精品视频在线观看| 亚洲最大福利视频| 色系列之999| 亚洲人成电影在线观看天堂色| 国产精品91视频| 欧美精品激情blacked18| 欧美高清性猛交| 国产精品视频白浆免费视频| 日日噜噜噜夜夜爽亚洲精品| 亚洲激情视频网| 最新国产成人av网站网址麻豆| 日韩成人激情影院| 日韩中文字幕av| 国产成人欧美在线观看| 91高清免费视频| 久久久久久久久久av| 日韩av电影在线播放| 一本一本久久a久久精品综合小说| 成人免费视频网址| 久久中文字幕视频| 亚洲欧美精品伊人久久| 成人精品一区二区三区电影免费| 国产+人+亚洲| 欧美日韩一区免费| 日韩高清av一区二区三区| 欧美在线一区二区三区四| 日韩欧美高清在线视频| 日韩精品在线看| 亚洲精品福利资源站| 久久久久中文字幕2018| 国产精品久久电影观看| 亚洲人午夜色婷婷| 丝袜一区二区三区| 亚洲电影免费观看高清| 福利一区视频在线观看| 久久激情视频久久| 精品福利在线看| 成人激情视频在线| 色综合视频一区中文字幕| 亚洲人成网站在线播| 国产精品极品美女粉嫩高清在线| 日韩欧美精品中文字幕| 日本高清视频精品| www国产亚洲精品久久网站| 精品日本美女福利在线观看| 日韩美女免费线视频| 国产免费久久av| 国产一区二区三区视频在线观看| 色悠悠国产精品| 国产精品久久久久aaaa九色| 在线视频欧美性高潮| 久久亚洲精品一区二区| 不卡中文字幕av| 欧美成人三级视频网站| 欧美性xxxx| 亚洲精品在线看| 国产综合在线视频| 91在线直播亚洲| 欧美在线观看视频| 欧美视频二区36p| 91国产视频在线| 亚洲人成电影网| 91高清免费在线观看| 九九久久久久99精品| 欧美午夜精品伦理| 亚洲性视频网址| 欧美人交a欧美精品| 538国产精品一区二区免费视频| 91sao在线观看国产| 国产高清在线不卡| 91免费电影网站| 亚洲欧美日韩中文在线制服| 国产精品视频永久免费播放| 国产视频亚洲视频| 国产视频观看一区| 在线观看亚洲视频| 精品视频在线导航| 亚洲男女自偷自拍图片另类| 2019中文在线观看| 欧美日韩在线免费观看| 国产精品尤物福利片在线观看| 国产精品普通话| 久久男人资源视频| 日韩中文在线中文网三级| 亚洲美女视频网站| 最近2019年日本中文免费字幕| 91po在线观看91精品国产性色| 97视频在线观看播放| 久久影院模特热| 欧美日韩中文字幕日韩欧美| 亚洲精品久久久久久久久久久| 国产做受高潮69| 亚洲经典中文字幕| 1769国内精品视频在线播放| 亚洲一区二区免费在线| 在线视频免费一区二区| 91精品久久久久久久久不口人| 国产精品久久久久久久久久久久久| 欧美性猛交xxxx乱大交| 日韩电影在线观看中文字幕|