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界面的表现力和操作便利性,也会使客户满意度大大提高。