2013-04-29 124 views
0

我在JSP中有下面的代碼。頁面沒有被重定向

try { 
    ... 
    if (...) 
     response.sendRedirect("secondPage.jsp"); 
    ... 
} catch (Exception e) { 
    response.sendRedirect("thirdPage.jsp"); 
} 

頁面沒有按照代碼重定向。 我在服務器中獲得IllegalStateException

+0

[java.lang.IllegalStateException:在提交響應後無法轉發]的可能重複(http://stackoverflow.com/questions/2123514/java-lang-illegalstateexception-cannot-forward-after-response-has-已提交) – Lion 2013-04-29 05:16:16

+0

如果您有異常堆棧跟蹤,那麼請不要忘記下次發佈完整的異常堆棧跟蹤。 – Lion 2013-04-29 05:19:08

回答

0

正如我所知...... 轉接呼叫後:

  1. 的響應是由服務器狀態碼302
  2. 響應進入瀏覽器創建的,但不顯示任何
  3. 此響應具有目標資源信息。
  4. 瀏覽器需要此目標資源信息並生成到目的地的內置請求(但它從不顯示此響應的任何內容)
  5. 請求轉到目標並且最終響應到瀏覽器並且瀏覽器顯示它。

這裏兩件事情,以通知:

  1. 在response.sendRedirect是的情況下( - )控制通過瀏覽器進入到最終的目的地用1個網絡往返。
  2. 在這種情況下,不要使用相同的請求和響應的對象(如HTTP是無狀態協議)

所以牢記這一點,你應該提供絕對URL(包括網頁上下文或網站根目錄文件夾)高達您的最終目的地資源,而不是相對網址。

0

你的代碼應該工作。但是,我建議使用<JSP:FORWARD>

例子: -

<jsp:forward page="index.jsp" /> 

它更貼近您的purpose.Try,並希望它會幫助你。

0

確保沒有寫任何東西到你的sendRedirect命令之前響應

既然你得到了IllegalStateException它看起來像你的jsp已經寫了一些內容到響應,然後嘗試重定向。

在這種情況下更好的選擇是在一個Servlet中編寫你的邏輯。