GWT除了支持將應(yīng)用Java語言開發(fā)的應(yīng)用轉(zhuǎn)化為Ajax應(yīng)用,同時(shí)提供了更多的高級特性,下面是這些特性的簡單描述。
1. GWT編譯器
GWT編譯器是GWT的核心,負(fù)責(zé)完成將Java代碼翻譯很Ajax內(nèi)容的工作。GWT編譯器能夠翻譯Java語言的大部分特性。包括支持Java 語言中的基本類型、違例處理等,支持java.lang包和java.util包中的絕大部分類和接口,支持正則表達(dá)式和序列化。
2. 跨平臺支持
如果你使用GWT中提供的顯示組件(比如Button)和組裝組件(比如VerticalPanel),GWT編譯生成的Ajax應(yīng)用能夠支持大部分的瀏覽器和操作系統(tǒng),比如Internet Explorer、Firefox等,也能夠支持Linux、Windows等不同操作系統(tǒng)。這是因?yàn)镚WT最大限度的將這些控件翻譯成瀏覽器內(nèi)置的類型。比如Button類編譯后生成的是標(biāo)準(zhǔn)HTML:
。
GWT建議使用CSS修飾頁面元素的顯示效果。GWT的類中很少提供訪問頁面元素樣式屬性的方法,我們可以直接在CSS文件中通過對應(yīng)的樣式名稱來設(shè)置頁面元素的默認(rèn)顯示效果。比如使用 .gwt-Button { font-size: 150%; } 使用Button元素的默認(rèn)顯示效果。
3. 宿主模式(Hosted Mode)
宿主模式是指我們和沒有轉(zhuǎn)換為Ajax應(yīng)用的GWT應(yīng)用交互的狀態(tài)。當(dāng)我們開發(fā)和調(diào)試時(shí),我們就一直處在宿主模式下。在這種情況下,Java虛擬機(jī)使用GWT內(nèi)置的瀏覽器運(yùn)行GWT應(yīng)用編譯后的class內(nèi)容,因此能夠提供”編碼、測試、調(diào)試”過程的最佳速度。
我們可以運(yùn)行com.google.gwt.dev.GWTShell啟動宿主模式。
4. Web模式(Web Mode)
Web模式是指已經(jīng)成功轉(zhuǎn)化為Ajax應(yīng)用的狀態(tài),這種狀態(tài)下,我們已經(jīng)開始通過Web方式來訪問Ajax應(yīng)用了。
在Web模式下運(yùn)行時(shí),不再需要GWT工具包或者JVM的支持。
5. 命令行工具
GWT工具包中提供了幾個(gè)非常適用的小工具來幫助我們更快的建立GWT應(yīng)用開發(fā)環(huán)境:projectCreator、applicationCreator、junitCreator。
* projectCreator
創(chuàng)建在Eclipse中開發(fā)GWT應(yīng)用所需要的項(xiàng)目基本文件和可選的Ant buildfile文件。
* applicationCreator
applicationCreator命令用于創(chuàng)建基本的HelloWorld!應(yīng)用和GWT應(yīng)用開發(fā)環(huán)境。
* junitCreator
生成junti測試代碼。
1.動態(tài),可重用的UI組件
GWT提供的組件庫使用戶可以很容易的開發(fā)出漂亮的UI, 每個(gè)組件對應(yīng)于GWT的一個(gè)類。在本文的第二部分會比較詳細(xì)的介紹GWT對UI的支持。
2.簡單的RPC調(diào)用
使用GWT,可以方便的實(shí)現(xiàn)客戶端和服務(wù)器端的通信,特別是使得異步通信變的非常簡單。在本文的后面部分將對利用GWT進(jìn)行RPC調(diào)用進(jìn)行詳細(xì)介紹。
3.更加方便的調(diào)試
由于在開發(fā)階段不需要生成HTML截面,用戶開發(fā)的代碼實(shí)際上是在JVM上運(yùn)行的,這樣用戶就可以用傳統(tǒng)的調(diào)試Java代碼的方法對程序進(jìn)行調(diào)試,從而加快了調(diào)試的速度,減少了軟件開發(fā)的時(shí)間。
4.瀏覽器兼容性
在大多數(shù)情況下,用GWT開發(fā)出來的程序會支持IE、Firefox、Mozilla、Safari和Opera,用戶在開發(fā)的時(shí)候不必?fù)?dān)心瀏覽器的兼容性問題。而瀏覽器的兼容性問題也是用直接用Javascript進(jìn)行Ajax應(yīng)用開發(fā)所面臨的一個(gè)另程序員棘手問題。
5.可擴(kuò)展性
如果你覺得GWT提供的API不能滿足需求,你可以利用JSNI將Javascript語句直接嵌入至Java代碼中。