2009-06-02 44 views
1

是否有標準或可接受的方法從Ajax Web應用程序中的頁面刷新恢復?從Web應用程序的頁面刷新中恢復?

我現在的興趣主要在於一個帶有Java(JSP/Servlet)後端的Web應用程序。我的頁面最初是從JSP呈現,然後用戶通過使用JavaScript事件的界面繼續前進。

是否有一個設計模式,涵蓋了這一點,我假設刷新按鈕是web開發人員需要擔心的經常發生,所以應該有一種方法從它恢復,同時保持狀態。

回答

4

有很多方法可以解決這個問題。

  • - 這是當它大頭針上#inbox/123這意味着它應該顯示的電子郵件ID 123帶標籤的收件箱中的Gmail做什麼。這不是很有表現力,對簡單的狀態很有用。但是,它確實爲用戶提供書籤頁面的功能,並使用瀏覽器歷史瀏覽。
  • Cookies - 這樣做的好處是可以完全在客戶端進行管理。您可以通過Javascript設置cookie並通過Javascript恢復它們。它很便宜,不需要和後貼。狀態信息通常不需要在服務器上保存,因爲狀態通常是暫時的。
  • 會話 - 這將需要您在客戶端更新頁面時通過AJAX將狀態信息回發回服務器。如果客戶端刷新頁面,則新頁面會將更改後的狀態合併到新呈現的頁面中。這在性能方面非常昂貴並且使設計複雜化,但對於某些應用可能是有用的。
2

我的建議是爲服務器端的每個用戶保留一個狀態機,用AJAX調用改變狀態。這樣刷新時,您已經知道用戶處於哪個狀態位置,允許您從中恢復。

如果您在編碼時不小心,可能會給您帶來可擴展性問題。

另一種解決方案可能是將狀態變量存儲在cookie中(假設用戶具有活動的cookie)。在頁面加載時,狀態變量將被提交給您的Web應用程序,允許您恢復。

+0

FYI一旦用戶打開同一網頁在兩個不同的窗口/標籤相同的瀏覽器與cookie方法的問題將是相當明顯的。 – 2009-06-02 13:44:53

+0

是真的,我在寫作的時候忘了。然後服務器端狀態機是我猜的最佳選擇 – fmsf 2009-06-02 13:47:58

1

以下是我們在項目中使用的一個解決方案:

  1. 您分配一個序列號/隨機GUID用戶訪問該網頁的頁面eash時間。你可以把它放到url的get部分(比如yourpage.jsp?pid = 1337,其中1337是頁面查看序列號)

  2. 當你處理AJAX請求時,你維護一個「鏡像」的會話中服務器端的頁面狀態或者您可以在JSP中用於存儲狀態的任何機制。

  3. 當用戶請求頁面時,您檢查給定的序列號是否已經存在,如果存在,則表示它是刷新的,因此您使用會話中的鏡像數據來呈現頁面。

相關問題