首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

RAP源码略读及分析

2014-01-22 
RAP源码泛读及分析SWT、RWT如何保证大部分API的一致??RWT对关键的方法进行了重写:渲染、事件处理,增加了适配

RAP源码泛读及分析

SWT、RWT如何保证大部分API的一致?

?RWT对关键的方法进行了重写:渲染、事件处理,增加了适配模型AbstractWidgetLCA

?在SWT、RWT中看似同样的处理,其实意义已经不同

? ? ? ?while( !shell.isDisposed() ) {

? ? ? ? if( !display.readAndDispatch() ) {//1

? ? ? ? ? display.sleep();//2

? ? ? ? }

? ? ? }

?SWT中

?1:触发控件事件

?2:基于OS,捕获系统事件、渲染UI

?RWT中

?1:触发后台控件事件

?2:基于HTTP,借助WidgetLCA适配模型,捕获WEB中的事件、渲染WEBUI

?

?

把前台括事件 ?映射到后台控件事件中,后台控件的响应在前台进行表现

前后台通宵通过JsonObject通讯

?

RAP总体分2个线程

1:http请求线程

2:后台UI处理线程(基于会话,保证多用户的安全性)

org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.UIThreadController

?

如何扩展RAP控件控件?

1:首先找个第三方的控件,比如:jquery的tree,把js拿过来

2:实现后台Wight把后台调用的方法通过RemoteObject与js进行映射

3:打包插件供别人使用

这样别人就可以像开发swt一样去实现一个jquery的树

?

?

?

?

RAP的一个响应流程:

比如在单机按钮弹出对话框的这个动作原理:

(WEB)单击按钮->触发js->ajax后台发送请求->

(后台处理)后台将request适配为对应控件的事件->后台弹出对话框(逻辑调用)->适配为前台动作(json的形式)->发送前台->

(WEB)动态调用js方法(弹出对话框)

?

RAP核心的代码

1:适配控件的处理(前后台的映射)

2:主逻辑的控制、WEB与OSGI的集成、一些WEB服务机制的搭建等

?

?

前台为什么选择Qooxdoo?

Qooxdoo并没有jquery、ext有名气,为什么还要选择它呢?个人觉得是因为它的设计思路与SWT比较接近,适配控件比较容易写

?

?

RCP RAP 有大部分的交集,但各自都有各自各特有的API

RAP 优势

1:把rcp的优秀的平台,无缝的迁移到了web中,可以搭建自己的WEB平台,具有极大的扩展性,eclipse的成功已经证明了这一点

这个我觉得是它最大的优势,它是个WEB平台不仅仅是个web框架,它可以把Ext、Flex、Jquery等作为一个插件或组件来使用

目前已经有很多插件供RAP使用,RAP项目的定位可能与当初RCP类似,要打造一个web生态,比如:

可以将共性的模块开发插件并提供扩展点,对外发布使用,这样你的开发就是在某个功能模块上再次开发,而不需要从头开发了

对于公司来也可以在技术上形成沉淀

?

?

2:保持与RCP的开发模式,这样可以将RCP的开发经验及封装的API使用到RAP中,但也有些不同:

   Web是一个多用户环境,所以在一个静态对象中(如singleton)保持应用状态是有可能引起问题的。

   现有的RAP是RCP的一个子集——如果期望得到超出RAP支持的RCP附加功能,这里推荐的做法是通过插件来引入它们。

   因为应用是在服务器上执行,开发者不应给每个用户分配大量的内存(这同样也是桌面应用的最佳实践)

?

3:开源便于研究内部实现,与一般框架一样都具有丰富的组件

?

RAP 缺点

1:使用人比较少、网上的相关资料也很少与RCP一样

2:不试用用户量大的项目,架构已经决定了

因为对于后台控件会为每个会话缓存一份,这样用户量大了服务端的内存消耗也是成正比的上升

不过它的懒加载机制会弥补下这种不足

?

?

RAP1例子说明

如果有发布应用为war,需要下载eclipse插件

用到了RCP中的视图、编辑器(tab)、form、菜单、Jface中的控件(List、Table)、带搜索的弹出对话框等进行了测试

结果:效果很不错,并且部署到tomcat中局域网访问也很流畅

?

?

?

?

http://www.blogjava.net/vwpolo/archive/2009/05/21/271911.html

?

http://www.blogjava.net/vwpolo/archive/2010/06/04/284577.html

如何发布rap

http://blog.csdn.net/luoww1/article/details/16880631

支持gef

?

RAP现有的客户端表现是基于qooxdoo

?

GWT是整个在浏览器执行的,而RAP的执行被分成了服务器端和客户端两部分

?

org.eclipse.rap.rwt.service.ServiceHandler

service ?client(所有内容都是从服务端请求过来的(servet))

org.eclipse.equinox.http.servlet.internal.ResourceServlet

org.eclipse.equinox.http.servlet.internal.ServletRegistration?

org.eclipse.rap.rwt.internal.service.StartupPageTemplate

rap-client.js

resources.js

org.eclipse.rap.rwt.internal.protocol.ProtocolMessageWriter

org.eclipse.rap.rwt.application.Application

org.eclipse.rap.rwt.application.ApplicationConfiguration

org.eclipse.rap.rwt.remote.RemoteObject org.eclipse.rap.rwt.internal.remote.DeferredRemoteObject

org.eclipse.rap.rwt.remote.Connection

org.eclipse.rap.rwt.internal.protocol.ProtocolMessageWriter

org.eclipse.rap.rwt.internal.protocol.Operation

org.eclipse.rap.rwt.lifecycle.WidgetAdapter

org.eclipse.rap.rwt.internal.remote.LifeCycleRemoteObject

org.eclipse.swt.internal.widgets.buttonkit.ButtonOperationHandler

org.eclipse.rap.rwt.lifecycle.WidgetUtil.getLCA(Widget)

org.eclipse.rap.rwt.internal.service.UISessionImpl

org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.executeUIThread()

org.eclipse.rap.rwt.internal.lifecycle.UIThread

org.eclipse.rap.rwt.internal.service.LifeCycleServiceHandler.writeProtocolMessage(ServletResponse)

org.eclipse.rap.rwt.internal.service.ContextProvider.getProtocolWriter()

org.eclipse.rap.rwt.internal.service.LifeCycleServiceHandler.handlePostRequest(HttpServletRequest, HttpServletResponse)

org.eclipse.rap.rwt.internal.service.ContextProvider

org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUIThread()

org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle

org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.executeUIThread()

org.eclipse.rap.rwt.internal.lifecycle.UIThread.switchThread()

org.eclipse.rap.rwt.internal.service.ServiceStore

org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.UIThreadController

org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle.createUI()

org.eclipse.rap.rwt.lifecycle.AbstractWidgetLCA.readData(Widget)网页中的事件适配到后台控件中

org.eclipse.rap.rwt.remote.OperationHandler


RAP源码略读及分析
?

以上都是个人在看源码的时候随笔记下的,比较乱,可能也有理解不对的地方望多指教

?

热点排行