我想使我的Web應用程序能夠離線工作,一旦它變爲在線或再次連接,它應該能夠在離線模式下傳輸用戶所做的修改。如何讓我的J2EE Web應用程序脫機工作?
我看過Google Gears作爲我的問題的理想解決方案,不推薦使用,因爲它現在已被棄用。
使應用程序在使用技術和應用程序設計方面脫機的好方法是什麼?
我想使我的Web應用程序能夠離線工作,一旦它變爲在線或再次連接,它應該能夠在離線模式下傳輸用戶所做的修改。如何讓我的J2EE Web應用程序脫機工作?
我看過Google Gears作爲我的問題的理想解決方案,不推薦使用,因爲它現在已被棄用。
使應用程序在使用技術和應用程序設計方面脫機的好方法是什麼?
由於HTML5標準允許在兼容瀏覽器中存在等效功能,因此不推薦使用齒輪。
關於您目前處理離線Web應用程序訪問的問題,您可以通過支持client-side SQL database access和client-side application HTTP cache來查看HTML5 for offline web applications提供的支持。
這些功能必須結合使用,因爲客戶端數據庫訪問將允許以結構化格式存儲數據(在應用程序脫機時生成),而脫機應用程序緩存允許緩存來自服務器的HTTP響應;您不應該緩存取決於任何用戶提供的輸入的動態本質響應。
建議的API的詳細信息可以在W3C HTML5 specification中找到,它目前正處於草案中,但似乎某些用戶代理已經實現了此功能。
這與J2EE沒有多大關係,而是您如何編寫Web客戶端。一種可能的解決方案是使用一個javascript客戶端,它將數據保存在html5引入的本地存儲中(請參閱http://diveintohtml5.ep.io/storage.html)。這也是谷歌齒輪被停止的基本原因......
我見過那些朋友,但如果瀏覽器的緩存被清除,那麼它將無法工作。這是其中的一個環回。 – deepmoteria
首先,您需要某種形式的離線存儲。正如google gears developer blog中所述,HTML5的功能是Google Gears的繼任者;從本質上來說,Google Gears的目的只是爲了推動後續採用HTML 5功能的開發&。
具體而言,您應該查看HTML5 offline(here's a tutorial)API和Storage API也可能派上用場(relevant tutorial)。
關於設計,您將基本上需要維護完整的Web應用程序狀態客戶端,然後在與服務器的連接再次可用時立即發送差異(即更新服務器端狀態)。
關閉我的頭頂,有2種簡單的方法來設計的:
明確維護客戶端和服務器單獨的應用程序的狀態。從本質上講,當用戶採取行動時,首先將其應用於客戶端應用程序狀態,然後以指定的時間間隔(和/或觸發器,例如用戶單擊保存按鈕),客戶端發送最後已知狀態服務器和客戶端的當前狀態。這可能最適合高度交互式的Web應用程序,我懷疑Google文檔適用於這種設計。根據您的應用程序(如果「可能發生衝突的更改」),您還需要考慮合併應用程序狀態:您是否覆蓋上次接收的客戶端狀態,或者您是否智能地嘗試合併? (你必須決定哪一個對你的特定應用更有意義。)
在離線狀態下記錄用戶操作,並在連接再次可用時重播它們。你基本上實現了Command design pattern,並且你的客戶端代碼和服務器端代碼都能夠處理每個命令。客戶端代碼總是處理每個命令,並且當與服務器的連接可用時,客戶端代碼也會將命令發送到服務器。您可能需要實施一些批處理,以避免對服務器的連續請求,以及在對服務器的請求失敗時(例如,衝突的更改)發生一些回滾功能。這最終看起來或多或少像GMail的主要電子郵件管理用戶界面,您可以在其中撤消操作。
您可以嘗試一種替代方案。例如,用於離線模式的Flash應用程序。用於在線模式的Web應用程序。 –
脫機存儲被高估。 – bhagyas