2011-08-24 103 views
5

我想使我的Web應用程序能夠離線工作,一旦它變爲在線或再次連接,它應該能夠在離線模式下傳輸用戶所做的修改。如何讓我的J2EE Web應用程序脫機工作?

我看過Google Gears作爲我的問題的理想解決方案,不推薦使用,因爲它現在已被棄用。

使應用程序在使用技術和應用程序設計方面脫機的好方法是什麼?

+0

您可以嘗試一種替代方案。例如,用於離線模式的Flash應用程序。用於在線模式的Web應用程序。 –

+0

脫機存儲被高估。 – bhagyas

回答

4

由於HTML5標準允許在兼容瀏覽器中存在等效功能,因此不推薦使用齒輪。

關於您目前處理離線Web應用程序訪問的問題,您可以通過支持client-side SQL database accessclient-side application HTTP cache來查看HTML5 for offline web applications提供的支持。

這些功能必須結合使用,因爲客戶端數據庫訪問將允許以結構化格式存儲數據(在應用程序脫機時生成),而脫機應用程序緩存允許緩存來自服務器的HTTP響應;您不應該緩存取決於任何用戶提供的輸入的動態本質響應。

建議的API的詳細信息可以在W3C HTML5 specification中找到,它目前正處於草案中,但似乎某些用戶代理已經實現了此功能。

0

這與J2EE沒有多大關係,而是您如何編寫Web客戶端。一種可能的解決方案是使用一個javascript客戶端,它將數據保存在html5引入的本地存儲中(請參閱http://diveintohtml5.ep.io/storage.html)。這也是谷歌齒輪被停止的基本原因......

+0

我見過那些朋友,但如果瀏覽器的緩存被清除,那麼它將無法工作。這是其中的一個環回。 – deepmoteria

1

首先,您需要某種形式的離線存儲。正如google gears developer blog中所述,HTML5的功能是Google Gears的繼任者;從本質上來說,Google Gears的目的只是爲了推動後續採用HTML 5功能的開發&。

具體而言,您應該查看HTML5 offlinehere's a tutorial)API和Storage API也可能派上用場(relevant tutorial)。

關於設計,您將基本上需要維護完整的Web應用程序狀態客戶端,然後在與服務器的連接再次可用時立即發送差異(即更新服務器端狀態)。

關閉我的頭頂,有2種簡單的方法來設計的:

  1. 明確維護客戶端和服務器單獨的應用程序的狀態。從本質上講,當用戶採取行動時,首先將其應用於客戶端應用程序狀態,然後以指定的時間間隔(和/或觸發器,例如用戶單擊保存按鈕),客戶端發送最後已知狀態服務器和客戶端的當前狀態。這可能最適合高度交互式的Web應用程序,我懷疑Google文檔適用於這種設計。根據您的應用程序(如果「可能發生衝突的更改」),您還需要考慮合併應用程序狀態:您是否覆蓋上次接收的客戶端狀態,或者您是否智能地嘗試合併? (你必須決定哪一個對你的特定應用更有意義。)

  2. 在離線狀態下記錄用戶操作,並在連接再次可用時重播它們。你基本上實現了Command design pattern,並且你的客戶端代碼和服務器端代碼都能夠處理每個命令。客戶端代碼總是處理每個命令,並且當與服務器的連接可用時,客戶端代碼也會將命令發送到服務器。您可能需要實施一些批處理,以避免對服務器的連續請求,以及在對服務器的請求失敗時(例如,衝突的更改)發生一些回滾功能。這最終看起來或多或少像GMail的主要電子郵件管理用戶界面,您可以在其中撤消操作。

相關問題