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


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


    網站導航:
     
    主站蜘蛛池模板: 欧洲精品免费一区二区三区| 永久免费的网站在线观看| 免费在线观看你懂的| 亚洲精品无码久久久久秋霞| 好爽又高潮了毛片免费下载| 亚洲一卡一卡二新区无人区| 成人免费淫片在线费观看| 亚洲乱码日产精品一二三| 国产精品黄页在线播放免费| 国产成人精品亚洲| 亚洲成a人在线看天堂无码| 一个人免费观看视频在线中文 | 国产区在线免费观看| 亚洲一区二区三区在线视频| 国产精品1024在线永久免费| 亚洲Av无码精品色午夜| 69视频免费观看l| 亚洲狠狠婷婷综合久久| 亚洲国产精品无码久久青草 | 亚洲精品黄色视频在线观看免费资源| 亚洲精品亚洲人成在线观看下载| 中文字幕a∨在线乱码免费看| 亚洲欧洲日产国产综合网| 青草草色A免费观看在线| 老司机午夜在线视频免费观| 亚洲夜夜欢A∨一区二区三区| 99免费在线观看视频| 亚洲色成人网站WWW永久四虎| 亚洲色偷偷狠狠综合网| 久久久久久久久久国产精品免费 | 亚洲国产成人久久综合一 | 久久精品免费电影| 亚洲国产区男人本色在线观看| 国产一级淫片视频免费看| 黄页免费在线观看| 亚洲乱色伦图片区小说| 国产AV无码专区亚洲AVJULIA | 亚洲视频无码高清在线| 国产乱辈通伦影片在线播放亚洲| 2020因为爱你带字幕免费观看全集| 亚洲av成人无码网站…|