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
以上都是个人在看源码的时候随笔记下的,比较乱,可能也有理解不对的地方望多指教
相关推荐
《新编商务英语泛读bookunitB分析解析》的学习教案主要涵盖了经济学中的核心概念,特别是与市场垄断、价格调控和法律框架相关的知识点。本篇内容深入浅出地讲解了这些概念,旨在帮助学习者理解商务环境中如何运用和...
泛读教程第四册答案.pdf
1. 预测文章的内容:通过浏览文章的总体结构安排或文章的标题,可以预测文章的内容及深层含义。 2. 掌握英文文体的结构特征:不同的英文文体有其特有的结构特征,掌握这些特征可以帮助我们更好地理解文章的内容。 3....
在本篇论文中,作者探讨了“大数据-算法”如何应用于汉语中级泛读教材难度的定量分析。文章首先介绍了汉语泛读教材的重要性和易读性研究的背景,指出当前中级汉语泛读教材在难度控制方面存在一些问题。为了量化这些...
英语泛读教程2:(第三版刘乃银).pdf 英语泛读教程是英语学习领域中的一本重要教材,本书旨在帮助读者提高英语阅读能力,掌握英语语言的基础知识。本书共分为两部分,第一部分为语法基础,第二部分为阅读理解。 ...
英语泛读教程1:(第三版刘乃银).pdf
英语泛读教程UnitFool'sParadisePPT课件.pptx
在Android平台上,小米便签...通过分析小米便签的源码,不仅可以学习Android应用的基础开发,还能深入理解高级特性,如数据持久化、多线程、网络请求等。这对于提升个人技能,完成毕业设计或撰写相关论文具有极大帮助。
这篇文档是关于“UnitClimate”的泛读教程,旨在教授与气候相关的英语词汇和概念,同时融入了阅读理解的教学策略。教程分为多个部分,包括预测试、气候定义、气候类型、气候灾难、气候变化以及文本阅读与分析。 ...
这篇高二英语泛读PPT课件主要围绕一次伦敦之旅展开,通过快速阅读和仔细阅读的形式,引导学生了解关于伦敦的历史文化、名胜古迹以及奥运会的相关知识。 1. **奥林匹克运动会相关知识**: - 29th Olympic Games(第...
这篇文档是关于大学英语泛读课程的知识讲解,包含多个课时的练习答案和重点词汇解析,旨在帮助学生巩固阅读理解能力和学习英语常用短语及表达。 在Lesson 1的Comprehension of the text部分,主要涉及对文章的理解...
【雅思阅读之精读泛读结合法】 雅思阅读考试中,精读与泛读的结合是一种有效的备考策略,旨在帮助考生提升词汇量、积累背景知识并增强阅读能力。以下是这两种方法的具体应用及其益处。 一、精读的重要性 精读指的...
【大学英语泛读】课程是大学英语教学的重要组成部分,旨在提升学生的阅读理解能力和词汇量,同时帮助学生掌握常用短语和表达。以下是针对四课内容的解析和知识点总结: 第一课: 1. 阅读理解题目测试了学生对文章...
刘乃银三二册英语泛读教程课件PPT概述 本资源是《刘乃银三二册英语泛读教程》的课件PPT,共16页,涵盖Book 2的Unit 1-9。每个单元包括Text、Fast Reading和Home Reading三部分,每部分都提供了答案.keys和解释。 ...
这篇文档讲述了《英语泛读教程》第一课的内容,是一篇关于美国作家劳拉·英格尔·威尔德生活故事的翻译。这个故事发生在19世纪70年代的威斯康辛州,描绘了劳拉一家在大森林边上的小木屋生活的情景。故事的核心事件是...
"大学英语泛读教程二Getting enough sleepPPT课件.pptx" 本资源围绕"Getting enough sleep"这个主题,旨在帮助学生掌握相关的英语阅读和理解技巧。下面是从该资源中提炼出的知识点: 1. Sleep Debt的概念:Sleep ...
在中国文化中,数字有着深远的影响,特别是在日常生活中。这些数字不仅仅是数学上的概念,它们与预兆、幸运和传统文化紧密相连。 首先,数字“一”(ONE)象征着开始和独立。它代表单一、纯粹,有时也被用来祈求...
英语专业泛读读物.doc
【商务英语泛读PPT课件】主要涵盖了广告和广告媒介相关的专业知识,旨在帮助学习者掌握广告领域的基础知识、相关表达及术语,并提升阅读理解能力。课程结构包括预读、阅读中和阅读后三个阶段,旨在逐步引导学生深入...