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

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

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

    vickzhu

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

        有不對之處還望指教!
        
    posted on 2008-11-03 14:38 筱 筱 閱讀(37264) 評論(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
    那如果前臺是靜態頁面呢?請問怎么辦?  回復  更多評論
      

    # 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  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲日韩精品无码专区加勒比| 亚洲国产精品成人久久久| 久久精品亚洲视频| 色噜噜综合亚洲av中文无码| 亚洲精品视频观看| 亚洲日韩国产欧美一区二区三区 | 国产精品国产免费无码专区不卡| 亚洲第一页综合图片自拍| 亚洲伊人久久综合影院| 亚洲AV无码成人精品区天堂| 亚洲第一视频在线观看免费| 亚洲午夜福利AV一区二区无码| 亚洲午夜激情视频| 亚洲最新在线视频| 亚洲一区二区观看播放| av网站免费线看| 久久免费福利视频| 最好看最新的中文字幕免费| 久久不见久久见中文字幕免费| 国产精品视频免费一区二区三区| 亚洲精品国产美女久久久| 亚洲福利电影在线观看| 亚洲成AV人影片在线观看| 国产精品黄页免费高清在线观看| 中文字幕无线码免费人妻| 99re热免费精品视频观看 | 国产免费久久精品| 亚洲国产无套无码av电影| 亚洲精品人成在线观看| 国产成人精品日本亚洲11| 色偷偷亚洲男人天堂| 一级毛片不卡片免费观看| 久久不见久久见免费影院| 亚洲乱码中文字幕综合| 亚洲毛片基地日韩毛片基地| 亚洲性一级理论片在线观看| av电影在线免费看| 免费精品国偷自产在线在线 | 久久精品国产亚洲一区二区三区| 亚洲小视频在线观看| 亚洲第一街区偷拍街拍|