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

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

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

    vickzhu

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      151 隨筆 :: 0 文章 :: 34 評論 :: 0 Trackbacks
        getOutputStream() has already been called for this response 這個錯誤遇到過不少次,網(wǎng)上看到大多不能解決問題。
        下面兩點是我自己總結(jié)出來的:
        1、在我們應用驗證碼時,都會用到字節(jié)流response.getOutputStream()來將驗證碼輸出,但是jsp頁面自己最后會調(diào)用字符流JspWriter的out()方法將頁面的內(nèi)容輸出。通過查看servlet的API我們可以看到知道,在servlet中不能夠同時利用這兩個流輸出,解決辦法將驗證碼寫在servlet中,具體見下面。
        2、相信請求轉(zhuǎn)發(fā)( request.getRequestDispacher().forward() )和請求跳轉(zhuǎn)( response.sendRedirect() )的區(qū)別大家都知道。其中request.getRequestDispacher().forward() 方法的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個訪問請求和響應過程。JSP頁面轉(zhuǎn)譯為的_servlet會最后調(diào)用releasePageContext()方法( All PageContext objects obtained via this method shall be released by invoking releasePageContext().)釋放我們頁面所有的實體對象,當我們的調(diào)用者有頁面輸出時,就會拋出這個異常。具體原因也沒有弄清楚,各位大俠如果誰知道可以告知一下。其實驗證碼也是同一個原理,如果我們將驗證碼的代碼寫在jsp頁面中,因為jsp頁面會調(diào)用JspWriter的out()方法將內(nèi)容輸出,同時我們的圖片又調(diào)用了response.getOutputStream()方法因此會拋出這個異常;如果我們將驗證碼寫在servlet中,就不會同時使用兩種輸出也就不會出錯。有時即使調(diào)用者頁面沒有輸出,也會拋出這個異常,仔細看jsp轉(zhuǎn)譯以后的源碼發(fā)現(xiàn)輸出了換行,因此,我們最好把調(diào)用者頁面的%>和<%之間換行去掉,把%>和<%直接寫在一起。
        另外,如果我們實在要在jsp中用到response.getOutputStream(),比如驗證碼、jspSmartUpload,我們需要在最后加入如下代碼:
            response.reset();
            out.clear();
            out=pageContext.pushBody();

        有不對之處還望指教!
        
    posted on 2008-11-03 14:38 筱 筱 閱讀(37265) 評論(19)  編輯  收藏

    評論

    # re: getOutputStream() has already been called for this response 錯誤解決 2009-04-20 11:37 gby
    好!!!  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2010-01-27 15:36 steven
    out.clear();
    out=pageContext.pushBody();

    怎么設置 out 變量?  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2011-08-13 10:59 啊啊
    我怎么覺得沒什么用啊?還是一樣的報這個錯誤的了?  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2011-08-25 10:23 K
    不錯了,解決,3Q  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2012-03-09 11:07 xuexizhe
    good
      回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2012-04-11 20:09 Aluo
    問題解決,Thank you very much!!!  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2012-04-20 15:30 sdf
    太好了 呵呵 幫助很大  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2012-05-03 15:35 zxd
    太棒了,謝謝你偶像,問題解決了!!!!!  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2012-05-08 15:16 hhh
    按照你說的, 在后面加了那兩句,換了最下面的那個錯誤了....
    -------------------------------------------------
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@page import="java.awt.image.BufferedImage,javax.imageio.ImageIO" %>
    <%@page import="com.shopzdw.shop.image.Pair,com.shopzdw.shop.image.ImageOut" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <%
    response.setContentType("image/jpeg");
    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    Pair<String, BufferedImage> p = ImageOut.getImage();
    ImageIO.write(p.getValue(), "JPEG", response.getOutputStream());
    session.setAttribute("valid", p.getKey());



    response.reset();
    out.clear();
    out=pageContext.pushBody();
    %>

    ----------------------------------------------------------------
    2012-5-8 15:12:50 org.apache.catalina.core.StandardWrapperValve invoke
    嚴重: Servlet.service() for servlet jsp threw exception
    java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.reset(ResponseFacade.java:310)
    at org.apache.jsp.ValidateImage_jsp._jspService(ValidateImage_jsp.java:71)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
      回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2012-05-09 15:50 wwt
    把response.reset();去掉就可以了。
    @hhh
      回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2012-07-02 11:39 a
    那如果前臺是靜態(tài)頁面呢?請問怎么辦?  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2012-07-18 10:21 lee
    非常感謝,我也是一樣的問題。  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2012-07-22 11:46 linman
    很好,謝謝!  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2012-07-27 18:31 xx
    非常感謝  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2012-08-09 17:59 SSDU灬丨HJ
    效果明顯 謝謝!  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2012-09-25 12:13 lmf
    @hhh
    去年response.reset();即可  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2014-10-22 16:16 jsp
    我的jsp頁面并沒有用到response.getOutputStream();呢?但是還是報了getOutputStream() has already been called for this response錯  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決 2015-04-22 14:44 lpy
    3q問題解決了  回復  更多評論
      

    # re: getOutputStream() has already been called for this response 錯誤解決[未登錄] 2016-04-08 17:44 s
    asda  回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲av色福利天堂| 男人的好看免费观看在线视频| 国产亚洲成在线播放va| 亚洲avav天堂av在线网爱情| 亚洲国产精品综合久久久| 精品亚洲AV无码一区二区| 无码乱人伦一区二区亚洲一| 在线观看国产区亚洲一区成人 | 亚洲91精品麻豆国产系列在线| 337p日本欧洲亚洲大胆艺术| 亚洲黄网站wwwwww| 亚洲欧洲另类春色校园小说| 亚洲成年人电影网站| 亚洲一区二区三区在线网站| 中文日韩亚洲欧美制服| 亚洲.国产.欧美一区二区三区| 国产精品久久久久久亚洲影视| 特级av毛片免费观看| 成人免费视频一区二区| 久久久久免费视频| 久久免费福利视频| 国产免费丝袜调教视频| 无码一区二区三区免费视频| 日韩成人免费视频播放| 亚洲第一区精品日韩在线播放| 不卡一卡二卡三亚洲| 亚洲国产精品久久久久婷婷老年| 亚洲一区二区三区日本久久九| 亚洲国产成人资源在线软件| 亚洲精品精华液一区二区 | 久久综合给合久久国产免费| 久久国产色AV免费看| 一二三四免费观看在线视频中文版| 午夜免费福利在线| 亚洲精品成人久久久| 久久久久无码精品亚洲日韩| 亚洲一区二区三区在线观看蜜桃| 亚洲AV无码XXX麻豆艾秋| 成人妇女免费播放久久久| 69av免费观看| 国产一区二区视频免费|