是否有標準或可接受的方法從Ajax Web應用程序中的頁面刷新恢復?從Web應用程序的頁面刷新中恢復?
我現在的興趣主要在於一個帶有Java(JSP/Servlet)後端的Web應用程序。我的頁面最初是從JSP呈現,然後用戶通過使用JavaScript事件的界面繼續前進。
是否有一個設計模式,涵蓋了這一點,我假設刷新按鈕是web開發人員需要擔心的經常發生,所以應該有一種方法從它恢復,同時保持狀態。
是否有標準或可接受的方法從Ajax Web應用程序中的頁面刷新恢復?從Web應用程序的頁面刷新中恢復?
我現在的興趣主要在於一個帶有Java(JSP/Servlet)後端的Web應用程序。我的頁面最初是從JSP呈現,然後用戶通過使用JavaScript事件的界面繼續前進。
是否有一個設計模式,涵蓋了這一點,我假設刷新按鈕是web開發人員需要擔心的經常發生,所以應該有一種方法從它恢復,同時保持狀態。
有很多方法可以解決這個問題。
#inbox/123
這意味着它應該顯示的電子郵件ID 123
帶標籤的收件箱中的Gmail做什麼。這不是很有表現力,對簡單的狀態很有用。但是,它確實爲用戶提供書籤頁面的功能,並使用瀏覽器歷史瀏覽。我的建議是爲服務器端的每個用戶保留一個狀態機,用AJAX調用改變狀態。這樣刷新時,您已經知道用戶處於哪個狀態位置,允許您從中恢復。
如果您在編碼時不小心,可能會給您帶來可擴展性問題。
另一種解決方案可能是將狀態變量存儲在cookie中(假設用戶具有活動的cookie)。在頁面加載時,狀態變量將被提交給您的Web應用程序,允許您恢復。
以下是我們在項目中使用的一個解決方案:
您分配一個序列號/隨機GUID用戶訪問該網頁的頁面eash時間。你可以把它放到url的get部分(比如yourpage.jsp?pid = 1337,其中1337是頁面查看序列號)
當你處理AJAX請求時,你維護一個「鏡像」的會話中服務器端的頁面狀態或者您可以在JSP中用於存儲狀態的任何機制。
當用戶請求頁面時,您檢查給定的序列號是否已經存在,如果存在,則表示它是刷新的,因此您使用會話中的鏡像數據來呈現頁面。
FYI一旦用戶打開同一網頁在兩個不同的窗口/標籤相同的瀏覽器與cookie方法的問題將是相當明顯的。 – 2009-06-02 13:44:53
是真的,我在寫作的時候忘了。然後服務器端狀態機是我猜的最佳選擇 – fmsf 2009-06-02 13:47:58