[英]How can I make my J2EE web application work offline?
我希望使我的Web應用程序能夠脫機工作,並且一旦它變得聯機或再次連接,它就應該能夠在脫機模式下傳輸用戶所做的修改。
我認為Google Gears是解決我的問題的理想解決方案,不建議使用它,因為現在已不建議使用。
在使用技術和應用程序設計方面,使我的應用程序脫機工作的最佳方法是什么?
不推薦使用Gears,因為HTML5標准允許在兼容的瀏覽器中提供等效功能。
關於當前處理脫機Web應用程序訪問時遇到的問題,您可以通過對客戶端SQL數據庫訪問的支持以及客戶端應用程序HTTP緩存 ,來研究HTML5為脫機Web應用程序提供的支持。
這些功能必須結合使用,因為客戶端數據庫訪問將允許以結構化格式存儲數據(在應用程序脫機時生成),而脫機應用程序緩存將允許緩存來自服務器的HTTP響應。服務器; 您不應該緩存依賴於用戶提供的任何輸入的動態響應。
可以在W3C HTML5規范中找到建議的API的詳細信息,該規范目前正在草擬中,盡管某些用戶代理似乎已經實現了此功能。
首先,您將需要某種形式的脫機存儲。 正如Google Gears 開發者博客上所述,HTML5的功能是Google Gears的后繼產品; 本質上,Google Gears的目的只是推動HTML 5功能的開發和后續采用。
具體來說,您應該查看脫機的HTML5 API( 這是一個教程 ),並且Storage API也可能派上用場( 相關的教程 )。
在設計方面,您基本上需要維護客戶端的完整Web應用程序狀態,然后在與服務器的連接再次可用時立即發送差異(即更新服務器端狀態)。
在我頭頂上,有兩種簡單的方法可以設計此方法:
明確維護客戶端和服務器的單獨應用程序狀態。 本質上,當用戶執行某項操作時,首先將其應用於客戶端應用程序狀態,然后按指定的時間間隔(和/或觸發,例如用戶單擊“保存”按鈕),客戶端發送過去的已知狀態之間的差異。服務器和客戶端的當前狀態。 這可能最適合高度交互的Web應用程序,我懷疑Google Docs可以在這種設計上工作。 根據您的應用程序(如果可能發生“沖突的更改”),您還需要考慮合並應用程序狀態:您是否使用上次接收到的客戶端狀態進行覆蓋,還是明智地嘗試合並? (您必須確定哪種方法更適合您的特定應用程序。)
離線記錄用戶操作,並在連接再次可用時重播它們。 本質上,您實現了Command設計模式 ,並且使您的客戶端代碼和服務器端代碼都能夠處理每個命令。 客戶端代碼始終處理每個命令,並且在與服務器的連接可用時,客戶端代碼也會將命令發送給服務器。 您可能要實現一些批處理,以避免對服務器的連續請求,以及對服務器的請求失敗(例如,更改發生沖突)時的一些回滾功能。 最終看起來或多或少像GMail的主電子郵件管理用戶界面,您可以在其中撤消操作。
這與J2EE無關,而與您如何編寫Web客戶端有關。 一種可能的解決方案是使用javascript客戶端,該客戶端會將數據確實保存在html5引入的本地存儲中(請參閱http://diveintohtml5.ep.io/storage.html )。 這基本上也是Google Gears被停止的原因...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.