rednight

          0x2B|~0x2B,That's not a question,Just do it.
          posts - 32, comments - 14, trackbacks - 0, articles - 0

          如果你碰到"Cannot Forward a Response that is Already Committed"這樣的錯誤信息,一定是應用對一次http請求做了多次頁面跳轉或對response對象做過close后,又去寫響應.

          這個問題的根本原因由于響應本次請求的Response對象的狀態是已提交狀態造成的, 它不允許響應提交多次。
          
          什么時候Response對象的狀態變成已提交狀態:當你的應用已經實現了頁面跳轉邏輯。
          
          通常原因:
          
          1. 如果你使用了community的話, community的安全認證和授權如果沒有通過,community內部會進行頁面跳轉。但你的應用(對于workshop應用的話,指的是action)又試圖進行頁面跳轉,就會出現這樣的問題。
          
          
              /**
          
               * @jpf:action
          
               * @jpf:forward name="page" path="page.jsp"
          
               */
          
              protected Forward actionMethod()
          
          {
          
              //如果已經提交了響應,你仍然試圖再次進行頁面跳轉,即再次提交響應,可能出現問題
          
              //通常可以加一個判斷
          
           
          
                 if (!getResponse().isCommitted()) {
          
                      return new Forward("success");
          
                  } else {
          
                      return null;
          
                  }
          
              }
          
           
          
              protected void beforeAction() {
          
                 SecurityManager.checkAuthorization(getRequest(), getResponse(), config.getString(
          
                          CDConstants.CREATE_TERM_ACTION_NAME, ""));
          
                //這個調用可能實現了頁面跳轉,即提交響應
          
          }
          
           
          
          注意JSP中實現頁面跳轉后,加return 語句防止繼續提交響應:
          
           
          
          <%
          
                 SecurityManager.checkAuthorization(getRequest(), getResponse(), config.getString(
          
                          CDConstants.CREATE_TERM_ACTION_NAME, ""));
          
          {
          
               //可能有實現頁面跳轉邏輯
          
              ……………forward();
          
                  return;//記得加retrun.
          
              }
          
          %>
          
           
          
          2. .如果沒有使用community的話,下面情景也會出現這個問題
          
           
          
              /**
          
               * @jpf:action
          
               * @jpf:forward name="page" path="page.jsp"
          
               */
          
              protected Forward actionMethod()
          
           
          
          //直接操作Response對象寫響應
          
               getResponse().getPrintWriter().println();
          
              …
          
          /
          
             // 又執行的頁面跳轉,也可能出現問題
          
                  return new Forward("index");
          
              }
          

          Feedback

          # re: Cannot Forward a Response that is Already Committed  回復  更多評論   

          2009-04-22 09:54 by 千里雪
          在java代碼中出現這個問題呢
          該如何解決啊

          # re: Cannot Forward a Response that is Already Committed  回復  更多評論   

          2009-04-22 09:55 by 千里雪
          有那位大蝦解答一下
          謝謝啊

          # re: Cannot Forward a Response that is Already Committed  回復  更多評論   

          2009-04-22 11:26 by 萬里冰
          在java中如何修改呢
          thanks

          # re: Cannot Forward a Response that is Already Committed  回復  更多評論   

          2009-04-22 17:04 by 萬里冰雪
          急用啊
          有那個大蝦幫忙解答一下啊

          # re: Cannot Forward a Response that is Already Committed  回復  更多評論   

          2012-06-19 09:02 by qingwei
          怎么解決。。。

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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 边坝县| 彰化县| 西丰县| 洛隆县| 文登市| 栾城县| 新邵县| 昭通市| 门头沟区| 铁力市| 军事| 东海县| 乐平市| 宝鸡市| 乐业县| 奉贤区| 集贤县| 田东县| 郁南县| 武邑县| 崇信县| 鞍山市| 枣阳市| 甘孜县| 承德市| 永嘉县| 凭祥市| 昆明市| 台东县| 敦煌市| 凤山市| 泾川县| 特克斯县| 礼泉县| 凤庆县| 弥渡县| 洛南县| 沈丘县| 安阳县| 奉贤区| 金塔县|