2010-08-11 96 views
0

我想對我的Java web應用程序進行AJAX調用。 Java web應用程序將在其他地方進行異步返回調用。該調用的結果將作爲AJAX請求的結果返回。如何處理來自AJAX調用的異步Java調用

我的問題的癥結是我會如何處理HttpRequest,而我正在等待第二次調用返回?

難道我只是阻止並等待AJAX​​處理程序方法中的調用,或者將請求存儲在某處並等待回調?我將如何處理錯誤/超時?

對於那些誰關心更多的信息,我怎麼來到這個情況如下:

這是一個基於XMPP即時消息系統的一部分。有一個全球支持用戶在我們的webapp的每個頁面上顯示爲一個圖標。我也想顯示這個用戶的存在,所以,我可以使用IM系統來請求這個用戶在每個用戶的存在,每個用戶和每個用戶最終DDOS。相反,我想讓一個用戶定期從Web應用程序查詢狀態並緩存結果。

因此,AJAX調用的服務器將返回緩存狀態或異步查詢XMPP服務器。

+0

你可以澄清你正在談論的** HttpRequest **嗎?你在談論Java中的** XMLHttpRequest **或** HttpServletRequest **嗎? – 2010-08-11 16:06:55

回答

0

您不應該阻止並等待AJAX​​調用。也就是說,不要同步撥打電話。你應該在Java方面做的是找出一種方法來阻止你等待響應從你的異步調用回來(也就是說,找出一種方法使請求同步。性能將會在任何新的數據的第一個呼叫。隨後的調用將打到緩存,所以你應該是好的)。您可以維護此數據的緩存,因此您可以先檢查緩存以查看數據是否存在。如果它不進行調用並將結果存儲在緩存中。否則,從緩存中獲取數據並將其發送回視圖。由於AJAX是異步的,只要數據從服務器返回,您的回調就會被調用。

+0

我從來沒有打算阻止AJAX調用,但除此之外,這是我最終做的,因此代表是你的。謝謝大家。 – 2010-08-20 14:49:14

0

這裏是我會做:

  • 當頁面啓動時,初始化的工作來獲取你需要的特定網頁數據數組,你需要確定工作,以便將來使用
  • 作業結果從頁面
  • 使用AJAX來輪詢作業結果,一旦任務完成,投票結束,並與數據
  • 緩存返回您所請求的Vivin表示
  • 緩存作業結果在服務器上的條目,給它一個超時選項
0

HTTP請求,即HttpServletRequest對象不可序列化。因此,在通話期間,您不能將它們存儲在任何類型的持久存儲中。無論如何,存儲請求並不合理,因爲HTTP協議的無狀態特性使其生命期限於HTTP請求本身的持續時間。

這實際上意味着您必須在呼叫期間保留HttpServletResponse對象。 HttpServletRequest對象不再需要,一旦執行HTTP請求的解析,並且一旦所有數據都可用於您的應用程序;它是在你的上下文中重要的響應對象。

響應可以使用用戶狀態的緩存副本填充。如果緩存中的副本已過時,則可能需要從XMPP服務器同步刷新(畢竟,它僅影響一個頁面加載的性能)。您可以從應用程序服務器中異步查詢,但必須將某些結果返回給瀏覽器(因此可能需要處理幾個邊緣情況)。