2012-07-30 136 views
2

我有一個GWT 2.4網絡應用程序。我想按照以下方式處理HTTP錯誤代碼:根據代碼將用戶發送到不同的GWT頁面。 是的,我知道GWT只有一個動態頁面,所以我想用這個地方。我添加了以下幾行加到web.xml:我如何處理GWT的404錯誤?

<error-page> 
     <error-code>404</error-code> 
     <location>/index.html#error:404</location> 
    </error-page> 

我想這應該用戶重定向到我的GWT應用程序,並顯示符合那個地方的景色。但這根本不起作用。當我嘗試訪問不存在的資源時,會顯示一個空白頁面。

一個地方本身存在,可以通過../index.html#error:404 URL訪問而沒有問題。所以問題出在服務器端。可能是服務器無法將我重定向到實際上不存在的頁面?

那麼,我該如何處理404和GWT的其他錯誤?

+0

您應該詳細說明您使用哪種機制進行通信以及何時發生服務器錯誤。 – 2012-07-30 13:13:53

+0

我想處理兩種情況:如果用戶手動輸入錯誤的地址,則會出現404服務器錯誤,並且會爲GWT客戶端中的所有未捕獲的異常進行全局錯誤處理。 – KutaBeach 2012-07-31 08:40:31

回答

0

錯誤處理和重定向需要在客戶端從服務器獲取數據時發生。

您是否使用RequestBuilder或RequestFactory來處理該通信?如果是這樣,您可以在RequestBuilder響應狀態中檢測到404並使用placeController.goTo(new ErrorPlace(404));(或者您可以設置您的位置)

+0

感謝您的回覆,checketts!這正是我做這件事的方式。如果用戶輸入錯誤的地址MANUALLY,則會出現404服務器錯誤,並且會處理所有未捕獲的異常的全局錯誤。 – KutaBeach 2012-07-31 08:38:44

+0

您將需要服務器端的單獨處理程序。 – checketts 2012-08-01 04:21:59

+0

對於全局異常處理,您可以在服務器端執行此操作。我使用Spring WebMVC,異常處理工作得很好,因爲它設置了Http狀態代碼,所以如果用戶手動瀏覽其餘的調用,他們會得到相同的行爲,並且我的RequestBuilder的子類在客戶端執行重定向。 – checketts 2012-08-01 04:24:15

0

您是否在使用Google App Engine?如果你是,你不能定義你的自定義404處理程序。在這裏的文檔看看:

https://developers.google.com/appengine/docs/java/config/webxml#Error_Handlers

總之,不管這一點,你需要定義/ *(捕獲所有)它上面不匹配得到所有其他映射後執行servlet映射。在該servlet中,您應該重定向到您的自定義頁面。

<!-- ERROR 404 replacement --> 
<servlet> 
    <servlet-name>missingPageServlet</servlet-name> 
    <servlet-class>com.myproject.MissingPageServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>missingPageServlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

希望有所幫助。