RAP?可以让开发人员使用 JAVA?API 和按照 Eclipse? 插件的开发模式构建基于 AJAX 的 Web?2.0 应用程序,是的,你没有看错,其实 RAP 的工作原理是采用交叉编译的方式将? Java? 代码生成html、 JavaScript和CSS 文件,底层基于 Qooxdoo?AJAX 框架,这样,我们就不必接触 JavaScript 、 CSS 和处理 Http 的细节了,可以让我们更关心程序的功能实现,想起来的觉得很幸福。
??RAP和 RCP? 一样,运行在 Equinox 框架上, Equinox 是 OSGI?R4 规范的实现,是一个非常优秀和成熟的 OSGi 框架, Eclipse? 是通过这个框架实现灵活的扩展性和插件的热部署。 RAP 也支持 Eclipse 的大部分扩展点,其实 RAP 和 RCP 在架构上非常的类似,下图分别为 RCP 和 RAP 的架构图:
?? 可以看出,这之间的整体架构差别不大,RCP 是基于 SWT 的, RAP 是基于 RWT 的,?? RWT 是实现了 SWT 功能的一个子集。其实这之间的使用方式都差不多。比如 RWT 也能和 SWT 一样使用 MVC 的方式来创建表格。
???RAP可以使用 Servlet? 编译,支持 Servlet?2.3 、 2.4 和 2.5 规范,并且可以通过打包成 war 文件部署在服务器上,客户端通过浏览器直接访问,不过这里的客户端和服务器的实现也不一样,。下面分别是服务器和客户端的实现。
???服务器端:
?
?
?
?
? 客户端的功能比较简单,是通过Qooxdoo 程序从服务器上更新信息并绘制出相应的组件显示在浏览器中。基本上只是负责提交和更新显示数据的功能,服务器端的功能就比较复杂,比如要管理插件的生命周期,寻找新的插件并加载和管理系统的资源,还要处理多用户环境,在不同 Sessions 之间处理? OSGI?bundles? 的关系。
?
?
?
??
?控件:
?
?
?
?
?
?
?
?
?
?
? GridLayout, RowLayout FillLayout FormLayout StackLayout
?
HttpServletRequest request = RWT.getRequest(); String var1 = request.getParameter( "var1" ); String var2 = request.getParameter( "var2" );
?
RAP.JFace?vs?RCP.JFace
?
? ?
?
?
? RAP的JFace实现了RCPJFace的所有视图查看器,比如TableViewer、TreeViewer等;
? 支持大多数的视图概念,像:ContentProvider、LabelProvider、ColorProvider、ViewerFilter、DecoratingLabelProvider,
? 支持文本装饰,比如文本框前面加个小灯泡提示
? 支持所有JFace的标准对话框,也支持自定义对话框。
? 支持向导页
? 支持附加视图,比如 Outline,Properties视图
? 编辑器支持:可使用多页编辑器,支持继承自ISaveablePart的视图
? 支持透视图:可支持透视图切换器,透视图扩展点。
? 支持Eclipse 3.3的菜单框架:包括Commands和Handler,支持采用表达式来控制菜单是否可见和是否可用
??支持Form表单样式?
?
?还有一个杀手级的特性: 支持在后台运行Job,可以通过UI界面执行长时间任务,支持Progress View 视图。
?
? 如果你很喜欢RCP中JFace的Data Binding功能的话,在RAP中也可以实现,通过RAP的附加插件可以让你拥有RCP的数据绑定功能,并且可以运用到目前所有的RAP控件中,
?
? 也许你看到这里的时候,上面的信息有些过时了,那有什么办法呢,Eclipse 组织的动作发展太快了,而且理念也非常的超前,应该听说过E4吧,Eclipse 的下一代开发工具,可以在Web 浏览器中打开Eclipse 进行开发了。持续关注Eclipse的发展,希望NetBeans不要落后的太远。
?RWT中布局采用的计算算法和 SWT 一样。
?
?
?
?
?
SelectionListener ControlListener ShellListener MenuListener ModifyListener VerifyListener
?
?
?
?
? RWT提供了附加的 API 可以方便 管理web? 环境,我们可以调用 RWT.java 的 getLifeCycle 静态方法 获得程序的生命周期控制类,直接操作程序的生命周期;? 可以通过 getResourceManager 静态方法获得资源管理的控制类,手工管理系统资源,通过 getSessionStore 方法管理session 资源;通过 getRequest ? 方法处理用户的请求 getResponse 处理服务器的响应。假如我们 从 下面URL 中得到请求的参数内容 :
http://localhost:8080/rap?startup=foo&var1=value1&var2=value2
可以调用
?
?
?RWT 附加 功能:
? 目前RWT支持以下事件类型:
?事件处理:
? RWP同样可以像 SWT 一样使用布局,布局的数据在服务器上计算处理,我们基本上不用担心跨浏览器出现布局混乱的问题了,目前 RWP 支持下面的布局:
?布局 :
? RWT实现了 SWT? 中的大部分基本控件,使用方法大同小异,也提供了 CTabFolder 、 CBanner 自定义控件, RWT 中的 Tree 和 Table 功能和 SWT 的的差不多,支持排序、过滤和直接编辑单元格,使用方式也一样的。可以直接从 SWT 代码复制到 RWT 程序中使用。
?
RWT?VS?SWT:
客户端: