SmartSWT簡介
為了提高傳統(tǒng)WEB應(yīng)用的界面表現(xiàn)能力,RIA技術(shù)應(yīng)時(shí)而生,各種RIA平臺通過各種手段來提高豐富的圖形界面。如Bindows,它使用動(dòng)態(tài)HTML技術(shù)模擬Windows控件,還有Flex,直接使用Flash做為WEB應(yīng)用的表現(xiàn)層,以彌補(bǔ)DHTML技術(shù)的不足。
而SmartSWT則是基于SWT的RIA發(fā)布平臺。它可以將普通的SWT的應(yīng)用直接發(fā)布成為一個(gè)可通過客戶端瀏覽器訪問的WEB應(yīng)用,這樣就使通過SWT直接開發(fā) 富UI的WEB應(yīng)用成為了現(xiàn)實(shí)。不僅如此,基于SWT擴(kuò)展的許多擴(kuò)展包也大都可以直接使用,如JFace、GEF等。
SmartSWT和SmartClient不一樣,它并不是將SWT應(yīng)用程序下載到客戶端來運(yùn)行,而是和B/S模式的WEB應(yīng)用一樣,整個(gè)應(yīng)用程序是運(yùn)行在服務(wù)端的,只是運(yùn)行過程中將圖形界面實(shí)時(shí)顯示于客戶端的瀏覽器中,并將客戶端的操作事件自動(dòng)實(shí)時(shí)返回服務(wù)端,觸發(fā)服務(wù)端原SWT應(yīng)用的事件處理代碼進(jìn)行處理。服務(wù)端的SWT應(yīng)用所進(jìn)行的數(shù)據(jù)庫操作和文件操作都是相對于服務(wù)器端進(jìn)行的,而不像C/S應(yīng)用那樣,需要客戶端自己將數(shù)據(jù)按自定義的通訊協(xié)議傳回服務(wù)端再進(jìn)行處理。
SmartSWT底層的通訊是加密而且高效的,在內(nèi)網(wǎng)的客戶端打開服務(wù)端的SWT應(yīng)用,和原來直接在本機(jī)使用相比相差不多。相當(dāng)于將您機(jī)器的CPU降一檔后運(yùn)行應(yīng)用程序的感覺。
SmartSWT目前測試版本是3.1,表示支持SWT3.1的兼容應(yīng)用程序。
下圖是一個(gè)SWT應(yīng)用(SWT Control Example)在SmartSWT平臺部署后,客戶端通過IE瀏覽器訪問的效果:
安裝運(yùn)行
SmartSWT的測試版僅支持Windows系統(tǒng),根據(jù)其用戶手冊的說明,它的服務(wù)端正式版將支持Linux、Unix等系統(tǒng)。SmartSWT安裝運(yùn)行非常簡單,從www.smartswt.com下載SmartSWT31壓縮包并解壓,在解壓目錄下有三個(gè)子目錄SmartSWTClient、SmartSWTServer和WEB。
1. 打開SmartSWTClient目錄,運(yùn)行Setup.exe安裝客戶端,該程序?qū)⒃诳蛻舳税惭b一個(gè)定制的小型JAVA虛擬機(jī)。
2. 打開SmartSWTServer目錄,運(yùn)行Startup.bat,將運(yùn)行SmartSWT服務(wù)端,SmartSWT使用自帶的JAVA虛擬機(jī),所以您不用預(yù)先準(zhǔn)備它。
3. 如果您的客戶端和服務(wù)端都在同一臺機(jī)器,則直接進(jìn)入WEB子目錄,用IE打開index.htm文件,大約15秒鐘左右即可在IE瀏覽器中啟動(dòng)SmartSWT桌面,您這時(shí)可以通過Start菜單,啟動(dòng)內(nèi)置的DEMO程序體驗(yàn)一番。
開發(fā)SmartSWT應(yīng)用
開發(fā)SmartSWT應(yīng)用基本上和開發(fā)普通的SWT應(yīng)用相同。您可以使用Eclipse的SWT可視化插件來幫助創(chuàng)建一個(gè)SWT應(yīng)用程序,比較好的有Designer及Eclipse的VisualEditor等。
用于部署到SmartSWT服務(wù)器的SWT應(yīng)用在開發(fā)時(shí)有些小的限制,幸好這些通常都只是舉手之勞:
1. Display的獲取必須統(tǒng)一使用Display display = Display.getDefault()方法,不能使用new Deisplay()創(chuàng)建,SmartSWT目前尚不支持多Display的應(yīng)用,對大多數(shù)應(yīng)用來說這不是問題;
2. 創(chuàng)建的Shell最好必須調(diào)用shell.setSize()對其尺寸進(jìn)行初始化,否則在SmartSWT將默認(rèn)呈最小化狀態(tài);
3. 盡量不要使用非公開的API,因?yàn)橛猩倭糠枪_API,可能SmartSWT并沒有實(shí)現(xiàn)它;
4. 盡量不要使用其它JNI技術(shù)和ActiveX控件,不要使用SWING和AWT等非基于SWT的控件;
5. 避免初始化時(shí)一次創(chuàng)建幾十上百個(gè)控件,這樣會(huì)造成啟動(dòng)時(shí)間較長,應(yīng)在需要顯示時(shí)創(chuàng)建控件。
部署SmartSWT應(yīng)用
SmartSWT的部署一樣很簡單,只需將調(diào)試通過的SWT程序的類文件,按包名目錄結(jié)構(gòu)原封不動(dòng)拷貝至SmartSWTServer的swtapps目錄,然后在SmartSWTServer.xml文件中按以下格式注冊一下,最后重啟SmartSWTServer,你就可以通過客戶端瀏覽器啟動(dòng)SmartSWT桌面,在Start->Programs菜單里啟動(dòng)它:
<!-- Configuration of each SWT Application
name: the name of the SWT Application
mainClass: the main class to start the SWT Application
startup: will it start just after the smartswt desktop started(haven't supported)
description: the description of the SWT Application
-->
<Application name="ControlExample"
mainClass="org.eclipse.swt.examples.controlexample.ControlExample">
<startup>false</startup>
<description>ControlExample Application</description>
</Application>
SmartSWT: RIA平臺的強(qiáng)有力競爭者
SmartSWT同其它RIA平臺比較有一些獨(dú)特的優(yōu)勢。首先它是基于SWT的RIA平臺,依托強(qiáng)大的Eclipse陣營,有許多擴(kuò)展技術(shù)可用,如JFace、GEF、EMF等,像UML設(shè)計(jì)器、報(bào)表、動(dòng)畫這樣的復(fù)雜圖形應(yīng)用都可以通過SWT實(shí)現(xiàn)后,發(fā)布到SmartSWT,從而在WEB上很輕松地使用這些桌面應(yīng)用獨(dú)有的表現(xiàn)技術(shù)。還有OpenGL、RCP這類應(yīng)用也有可能在將來得到支持,而且Eclipse不斷發(fā)展中,SWT相關(guān)技術(shù)的不斷成熟,都將以最快的速度同時(shí)運(yùn)用于WEB應(yīng)用。而且多年來用積累的用SWT開發(fā)的軟件,不需要修改,或只需少量的修改,即可同時(shí)擁有WEB版本。
其次,很多JAVA應(yīng)用開發(fā)者往往只對JAVA服務(wù)端的技術(shù)感興趣,而對表現(xiàn)層采用的HTML、JS、JSP這類標(biāo)簽語言和腳本技術(shù)并不喜歡。而事實(shí)上兼通JAVA技術(shù)、HTML和腳本技術(shù)的程序員也是少之又少。這也是造成許多傳統(tǒng)J2EE應(yīng)用的界面表現(xiàn)不佳的原因。由于SmartSWT直接采用了SWT,使的整個(gè)應(yīng)用的開發(fā)完全是純JAVA技術(shù)的開發(fā)過程,開發(fā)者不再需要與非面向?qū)ο蟮腍TML、JS、JSP等標(biāo)簽語言和腳本技術(shù)打交道,整個(gè)開發(fā)過程完全是桌面應(yīng)用的開發(fā)模式,基于事件驅(qū)動(dòng)。這使得應(yīng)用開發(fā)在技術(shù)人員的配備上要容易得多。
此外,發(fā)布到SmartSWT的SWT應(yīng)用,客戶端通過瀏覽器使用時(shí),仍然具有和原SWT一樣的具有Windows本地風(fēng)格的界面,具有和真正桌面應(yīng)用一樣的表現(xiàn)能力和事件機(jī)制,其表現(xiàn)能力和功能是Bindows以及Flex等技術(shù)無法真正模擬的。
SmartSWT的局限性
盡管SmartSWT有諸多好處,但也存在一些局限性。 由于技術(shù)實(shí)現(xiàn)的原因,對網(wǎng)絡(luò)傳輸速度要求較高。SmartSWT在內(nèi)網(wǎng)內(nèi)訪問時(shí),其使用效果和本機(jī)上直接使用相差不多,但在外網(wǎng)上卻幾乎不具可用性。這決定了SmartSWT只能用于開發(fā)企業(yè)內(nèi)網(wǎng)應(yīng)用。
另外,和Flex類似,F(xiàn)lex要求客戶端的瀏覽器安裝一個(gè)Flash ActiveX控件,SmartSWT也有類似要求。SmartSWT客戶端需要在瀏覽器中實(shí)時(shí)表現(xiàn)服務(wù)端SWT應(yīng)用的圖形界面,并對用戶操作做出響應(yīng),這就需要在客戶端安裝一個(gè)特制的小型JAVA虛擬機(jī),并以ActiveX控件的形式在IE中使用。某些政府機(jī)關(guān)的敏感部門對這種方式 可能比較反感。
選擇SmartSWT,還是...
是否選擇SmartSWT,取決于您的軟件應(yīng)用范圍和客戶。如果您的軟件是內(nèi)網(wǎng)的企業(yè)應(yīng)用,您的用戶日常辦公使用的是Windows系統(tǒng),而且對客戶端安裝一個(gè)小小的虛擬機(jī)不介意的話,選擇SmartSWT無疑是上佳選擇 。它將使您的WEB應(yīng)用開發(fā)充分享受SWT開發(fā)的各種便利性和各方的豐富技術(shù)支持,完成普通WEB無法完成的功能。SWT界面的表現(xiàn)力和操作便利性,也會(huì)使客戶滿意度大大提高。