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