GWT

GWT

Google Web Toolkit(GWT Web Toolkit,簡寫:GWT),是一種允許開發人員使用Java編程語言快速構建和維護複雜但性能高的JavaScript前端應用程序的工具集,能夠降低開發難度,尤其是與EclipseGoogle插件結合使用時,優勢更明顯。有了 GWT可以使用Java編程語言編寫AJAX前端,然後GWT會交叉編譯到優化的JavaScript中,而JavaScript可以自動在所有主要瀏覽器上運行。

有了Google Web Toolkit工具包(GWT),可以使用Java編程語言編寫AJAX前端,然後GWT會交叉編譯到優化的JavaScript 中,而JavaScript可以自動在所有主要瀏覽器上運行。在開發過程中,您可以用JavaScript按習慣的相同“編輯-刷新-查看”循環快速反覆,還有另一個好處就是能夠調試和逐行單步調試Java代碼。準備好進行部署后,GWT會將Java源代碼編譯到優化且獨立的JavaScript文件中。使用Google Web工具包可以輕鬆地為現有網頁或整個應用程序構建一個Widget

原理


使用Java語言編寫AJAX應用程序,然後編譯為優化的JavaScript。
與僅在文本級別運行的JavaScript Minifier不同,GWT編譯器會在整個GWT資料庫中執行綜合性靜態分析和優化,通常生成的JavaScript載入和執行均比等效手寫的JavaScript更快。例如,GWT編譯器可以安全地消除無用代碼--極大的減少不使用的類別、方法、欄位甚至方法參數--以確保您編譯的腳本儘可能最小。另一個示例:GWT編譯器選擇性地內聯方法,消除方法調用的性能開銷。
交叉編譯提供了開發所需的可維護的提取和模塊性,而不會導致運行時性能損失。

運行環境


GWT應用程序有兩種方式運行:
HostedModel
在Hosted Model方式下,Java程序並不會被編譯成JavaScript,GWT只是創造了一個類似瀏覽器的環境,直接運行使用GWT開發的程序。
這種模式最具生產力(這種模式下可以Debug所有的Java代碼),所以開發環境通常使用Hosted Model,但是真正的程序執行不使用這種模式。
WebModel
WebModel就是將使用GWT編寫的Java程序整整編譯成JavaScript,在Web容器上運行,使用瀏覽器訪問的模式,這種方式只有在測試或者運行的時候才使用,每次對Java類的修改必須重新編譯這些Java類,之後重新部署應用。
所以生產力比較低。

開發流程


編輯Java代碼,然後立即查看更改而無需重新編譯
在開發過程中,使用GWT的託管模式瀏覽器可以立即查看代碼更改。無需彙編譯為JavaScript或部署到伺服器。只需進行更改,然後在託管模式瀏覽器中單擊“刷新”。
使用Java調試器單步調試當前AJAX代碼
在生產過程中,可以將代碼編譯為純JavaScript,但是在開發階段,代碼將在Java虛擬機作為位元組碼運行。這意味著,當代碼執行處理滑鼠事件等操作時,將獲得功能完整的Java調試。Java調試器可以執行的任何操作也應用於GWT代碼,所以也可以執行斷點和單步調試等自然操作。
編譯和部署優化的、跨瀏覽器的JavaScript
準備好進行部署后,GWT會將Java代碼編譯成獨立的純JavaScript文件,任何網路伺服器都支持該文件。此外,GWT應用程序可自動支持IE、Firefox、MozillaSafariOpera,而無需在代碼中進行瀏覽器檢測或特殊封裝。編寫相同的代碼后,GWT會根據每個用戶的特殊瀏覽器將其轉換為最有效的JavaScript。

功能


通過非常簡單的RPC與伺服器通信
GWT支持一組開放的傳輸協議,例如JSON和XML,但GWT RPC使所有Java通信都特別輕鬆且有效。類似於傳統JavaRMI,只需創建一個用於指定您要調用的遠程方法的介面。從瀏覽器調用遠程方法時,GWT RPC將自動串列化參數,並調用伺服器上的適當方法,然後反串列化客戶端代碼的返回值。GWT RPC也將非常成熟,其可以處理多態類層次結構、對象圖循環,甚至可以跨網拋出異常。
GWT-根據用戶個人資料優化JavaScript腳本下載
延時綁定是GWT的一種功能,可以生成許多版本的編譯代碼,而在運行時自引導期間僅其中一個版本需要由特殊客戶端載入。每個版本均以瀏覽器為基礎生成,並帶有應用程序定義或使用的任何其他軸。例如,如果要使用 GWT的國際化模塊來國際化應用程序,GWT編譯器可能會根據每個瀏覽器環境生成各個版本的應用程序,例如“英文版Firefox”、“法文版Firefox”、“英文版InternetExplorer”等,因此,部署的JavaScript代碼非常緊湊並且下載比在 JavaScript中編碼然後聲明更快。
跨項目重複使用UI組件
通過合成其他Widget來創建可重複使用的Widget,然後輕鬆地在面板中自動對他們進行布局。GWT展示應用程序可以提供GWT中各種UI功能的概述。要在其他項目中重複使用Widget嗎?只需將其打包以便他人在JAR文件中使用。
GWT-使用其他JavaScript庫和本機JavaScript代碼
如果GWT的類庫不能滿足您的需要,則可以使用Java Script本地介面(JSNI)在Java源代碼中加入手寫的JavaScript。使用GWT1.5,現在就可以為GWT JavaScriptObject(JSO)類創建子類以將Java“類覆蓋”創建到任意 JavaScript對象上。因此,可以獲得將JS對象比擬為適當的Java類型(例如代碼完成、重構、內聯)而無需另外佔用內存或速度的好處。此功能可以優化使用JSON結構。
輕鬆支持瀏覽器的後退按鈕和歷史記錄
不,AJAX應用程序無需破壞瀏覽器的後退按鈕。使用GWT,您可以通過輕鬆地為瀏覽器的後退按鈕歷史記錄添加狀態,來使您的站點更加有用。
有效的本地化應用程序
使用GWT功能強大的延時綁定技術來輕鬆創建有效的國際化應用程序和庫。此外,從1.5版起,標準GWT Widget開始支持雙向性。
使用選擇的開發工具提高生產力
由於GWT使用Java,您可以使用所有喜歡的Java開發工具(Eclipse、IntelliJJProfilerJUnit)來進行AJAX開發。這使網路開發人員可以控制自動化Java重構和代碼提示/完成的生產效率。此外,Java語言的靜態類型檢查使開發人員可以在編寫代碼時而非運行時找出一類JavaScript錯誤(輸入錯誤、類型不匹配),在減少錯誤的同時提高生產率。沒有臨時變數發現的更多用戶。最後,則可以利用基於Java的OO設計模式和提取,由於編譯器優化,模式和提取易於理解和維護而無需用戶承擔任何運行時性能損失。
使用JUnit測試代碼
GWT與JUnit直接集成,使您可以在調試器和瀏覽器中進行單元測試,並且您甚至可以對非同步RPC進行單元測試。
擴展或投稿-Google Web工具包是一種開源軟體
使用Apache2.0許可,可獲取所有GWT代碼。如果您對投稿感興趣,請訪問使GWT變得更好。

應用


目前GWT的應用還不是特別廣泛,包括google自己的gmail等系統都不是用GWT開發。但是在這一些電子領域裡GWT已經有廠商使用GWT開發設備上的用戶界面,從而實現遠程本地一套代碼的效果。