【KMS】Cannot forward a response that is already committed


問題的根本原因由於響應本次請求的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 語句防止繼續提交響應:

2. .如果沒有使用community的話,下面情景也會出現這個問題

    /**
     * @jpf:action
     * @jpf:forward name="page" path="page.jsp"
     */
protected Forward actionMethod()
{
      //直接操作Response對象寫響應
      getResponse().getPrintWriter().println();
      …
      // 又執行的頁面跳轉,也可能出現問題
        return new Forward("index");

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM