報(bào)getOutputStream() has already been called for this response 這個(gè)錯(cuò)誤

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

          posted on 2012-09-24 17:33 youngturk 閱讀(435) 評論(0)  編輯  收藏 所屬分類: JSP隨筆Java基礎(chǔ)servlet

          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結(jié)構(gòu)
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學(xué)習(xí)

          Flex學(xué)習(xí)

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 湘阴县| 延吉市| 成武县| 白银市| 雷山县| 县级市| 老河口市| 蕲春县| 孙吴县| 铜陵市| 肥西县| 昂仁县| 电白县| 栾城县| 永春县| 旅游| 荣昌县| 海城市| 西昌市| 宁蒗| 五大连池市| 清苑县| 新野县| 临沭县| 马山县| 大丰市| 金坛市| 木里| 富蕴县| 亚东县| 泌阳县| 宜兴市| 永修县| 商丘市| 呼伦贝尔市| 霸州市| 长宁区| 南平市| 江门市| 疏勒县| 镇沅|