<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 筱 筱 閱讀(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
    那如果前臺是靜態頁面呢?請問怎么辦?  回復  更多評論
      

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


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


    網站導航:
     
    主站蜘蛛池模板: 又粗又硬又大又爽免费视频播放| 最近高清中文字幕无吗免费看| 日本免费v片一二三区| 亚洲精品福利你懂| 中国在线观看免费高清完整版| 午夜在线a亚洲v天堂网2019| 手机在线毛片免费播放 | 亚洲男人天堂2017| 久久国产精品免费网站| 亚洲人成影院在线| 免费观看国产网址你懂的| 亚洲不卡中文字幕| 午夜免费福利在线观看| 亚洲AV网一区二区三区 | 日本牲交大片免费观看| 理论秋霞在线看免费| 久久青青草原亚洲av无码| 国产日韩精品无码区免费专区国产| 亚洲日韩精品一区二区三区 | 亚洲国产二区三区久久| 五月婷婷综合免费| 麻豆亚洲AV成人无码久久精品| 亚洲成a人片在线观看日本麻豆| 一区二区视频在线免费观看| 精品亚洲综合在线第一区| 黄网站色在线视频免费观看| 亚洲偷自拍另类图片二区| 亚洲精品视频在线看| 久久久久久免费一区二区三区 | 无人视频免费观看免费视频 | 日韩亚洲国产高清免费视频| 国产传媒在线观看视频免费观看| 久久www免费人成精品香蕉| 亚洲嫩草影院久久精品| 日本高清免费不卡在线| 国产精成人品日日拍夜夜免费| 亚洲av永久综合在线观看尤物| 免费一级黄色毛片| 免费A级毛片无码A∨| 蜜桃传媒一区二区亚洲AV| 亚洲福利在线观看|