2011-03-05 70 views
0

我從一個頁面使用下面的代碼抓住一些數據失敗:重新定向如果驗證在JSP

int clientId = Integer.parseInt(request.getParameter("clientId")); 

我試圖用try/catch語句圍繞着它,然後使用response.sendRedirect("page.jsp");在catch塊重定向,但該頁面不會重新指向,它似乎要完成整個腳本(由於初始變量無效,反過來會引發更多錯誤!)。我在這裏錯過了什麼基礎?

+0

順便說一句,這是代碼在JSP中,還是在一個Servlet中?在.JSP頁面中輸入 – Bozho 2011-03-05 21:54:48

+0

。那個回報;似乎已經做到了。 – greenimpala 2011-03-06 13:31:49

回答

1

你也許錯過了return聲明(雖然我沒有看到你的代碼):

response.sendRedirect(..); 
return; 

如果你簡單地調用sendRedirect(..)這將設置Location HTTP頭和HTTP狀態,但不會影響當前方法的流程,並且會繼續。

1

您需要確保JSP頁面上的所有scriptlet邏輯都是有條件的,具體取決於「clientId」的存在,因此您的catch塊可能需要下到JSP頁面的底部。請記住,JSP頁面被編譯成一個servlet,所以你仍然需要確保代碼能夠被編譯。一般來說,我強烈建議你把這個邏輯放在一個單獨的類(例如一個控制器類的類)中,並且儘量減少JSP頁面上scriptlet代碼的數量。否則就很難保持。

如果這不能爲您解決問題,請發佈您的整個JSP代碼,以便我們可以確定建議的位置。

2

閱讀您的服務器日誌。我的仙,因爲它與IllegalStateException s雜亂無章。有關更多詳細信息,另請參閱this answer

不要濫用JSP作爲頁面控制器。由於JSP本身就是響應的一部分,因此不能再從JSP內部更改它(好吧,有黑客/解決方法,但不想使用黑客/解決方法)。要控制請求/響應,你應該使用一個servlet。創建一個servlet,讓它監聽某個URL,讓表單提交到該URL,讓servlet執行您在JSP中擁有的所有Java代碼,並最終控制響應目標。

您可以在我們的Servlets wiki page中找到Hello World示例。它也涵蓋了基本的驗證。