- 浏览: 407034 次
- 性别:
- 来自: 长春
-
文章分类
最新评论
-
milkyTea_:
...
学习:二维码、QR码、J4L-QRCode、java -
xunke515:
请问如何更换其他用户,注销了从新登录的时候选择么?
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine -
_copythat:
学习:二维码、QR码、J4L-QRCode、java -
小fi(FD):
楼主,你好,关于你发表的《基于动态表单的Java不确定字段数报 ...
基于动态表单的Java不确定字段数报表项目实现 -
rmn190:
受用了。多谢分享!
SD2见闻--参加PPT制作秘笈沙龙
在此贴上我发表在2008年10月份《程序员》杂志的一篇技术文章。
在Web2.0大行其道的今天,有很多桌面应用程序已经运行到浏览器上面,这其中有Microsoft Office Live, Google Docs等等。自从Eclipse 3.0引入Rich Client Platform(后面简称RCP)以来,RCP应用程序得到了广泛的应用,自然,人们期望RCP应用程序也能够运行在浏览器上面,尽管这是一个挑战,但总是有人能挑战成功,Eclipse下面的子项目Rich Ajax Platform(后面简称RAP)就做到了,这篇文章就是告诉你如何用RAP将你的RCP应用程序移植到B/S架构上。
前提
l 熟悉Java语言
l 熟悉Eclipse IDE和RCP应用程序开发
l 机器上安装了Eclipse 3.3 或者 Eclipse 3.4
RAP简介
RAP使得开发人员只需要做很少的修改就可以将RCP应用程序移植到B/S架构,开发人员甚至不需要了解Web应用程序开发技术,他(她)依然可以用Eclipse开发模式来开发RCP应用程序,依然可以利用扩展点机制来扩展RCP的Workbench,依然可以使用SWT(Standard Widget Toolkit), JFace来构建用户界面, 然后再做一点修改,请相信我,确实只需要做一点修改,就可以将RCP应用程序变成一个具有Ajax特性的Web应用程序。以下是RCP应用程序和RAP应用程序的架构对比图,RAP基于Ajax框架qooxdoo 做了一个特殊的SWT实现,目前只实现了SWT的一个子集,叫做RWT(RAP Widget Toolkit), 以此来构建用户再浏览器里面看到的界面,另一边,RAP将OSGi R4核心框架的实现Equinox作为RAP应用程序的服务器端,是的,RAP需要把Equinox嵌入Servlet Container。
图1 —— RCP应用程序和RAP应用程序的架构对比(出自Eclipse网站)
安装RAP
像安装其他Eclipse插件一样, 你可以用Eclipse自带的软件安装界面来安装RAP, RAP的update site是http://download.eclipse.org/technology/rap/update-site ,装完之后,你还需要去RAP的网站http://www.eclipse.org/rap/downloads 下载一个RAP的目标平台,假设你将其下载并解压到c:\rap\eclipse目录,由于RAP和RCP不能同时存在于Eclipse IDE里面,(为什么不能?因为这两者有太多同名的 Java class, RAP的RWT的类名跟RCP的SWT的类名一样), 所以你需要修改Eclipse的目标平台,使其指向RAP目标平台, 点击Window > Preferences... > Plug-in Development > Target Platform, 将Location设置为c:\rap\eclipse,并点击Reload按钮将RAP目标平台的插件加载进来,如图2所示
图2 ——修改Eclipse的目标平台为RAP
好了,到此你把环境准备好了,下面将要介绍如何将RCP程序运行在B/S架构上,正如你猜到的,下面介绍的其实就是如何将一个RCP应用程序转换成RAP应用程序,首先,你需要创建一个RCP应用程序。
创建一个模板RCP应用程序
你可以自己创建一个很简单的Hello World RCP应用程序,也可以复杂一点,比如加一个树控件,弄一些菜单进来。但是我建议用Eclipse自带的RCP模板应用程序,既然Eclipse自带了,而且这样也可以节省不少时间,那为什么不用呢?
点击File->New->Project…, 选择Plug-in Project, 点击Next按钮,为这个将要导入的RCP样本应用程序取名,然后点击Next按钮,在此,将Would you like to create a rich client application设置为Yes,如图3所示,这样在下一页就能看到Eclipse自带的RCP模板应用程序了。
图3——设置Rich Client Application
再次点击Next按钮,选择RCP Mail Template,如图4所示,点击Finish按钮,这样你就得到了一个比较复杂的RCP应用程序了。
图4——选择RCP Mail Template
转换RCP应用程序为RAP应用程序
为了让上面的RCP应用程序运行在B/S架构上,需要将其转换为RAP应用程序。下面分三步修改这个RCP应用程序,使其转换成RAP应用程序。
第一步:修改MANIFEST.MF文件。用Plug-in Manifest Editor打开plugin.xml或者META-INF/MANIFEST.MF文件,切换到Dependencies选项页,在Required Plug-ins列表里面,将里面二个条目org.eclipse.ui和org.eclipse.core.runtime全删掉,增加一个新的条目org.eclipse.rap.ui。插件org.eclipse.rap.ui包含了插件org.eclipse.ui中的绝大多数类和扩展点,而且全名(full qualified name)是一样的。这样可以确保依赖插件org.eclipse.ui的RCP应用程序能够在几乎不做修改的情况下跑在RAP平台中。以下是修改前和修改后的MANIFEST.MF文件,以供对比。
清单1——修改前的MANIFEST.MF文件
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Mail Plug-in
Bundle-SymbolicName: mail; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: mail.Activator
Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime
Eclipse-LazyStart: true
清单2——修改后的MANIFEST.MF文件
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Mail Plug-in
Bundle-SymbolicName: mail; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: mail.Activator
Require-Bundle: org.eclipse.rap.ui
Eclipse-LazyStart: true
第二步:修改入口程序。由于RCP应用程序的入口是实现了接口org.eclipse.equinox.app.IApplication的类,在这个RCP模板应用程序里,这个类是mail.Application,为了让Eclipse知道这个类就是RCP应用程序的运行入口点,还需要用如清单3所示的扩展点注册该类。
清单3——RCP应用程序入口注册
<extension
id="application"
point="org.eclipse.core.runtime.applications">
<application>
<run
class="mail.Application">
</run>
</application>
</extension>
RAP应用程序的入口是实现了接口org.eclipse.rwt.lifecycle.IEntryPoint的类,所以你需要将mail.Application修改成如清单4所示的样子,剩下的界面相关的类ApplicationWorkbenchAdvisor,ApplicationWorkbenchWindowAdvisor,Perspective,View都不需要做修改(请注意这里没有包括类ApplicationActionBarAdvisor,后面会对其做一点微小的修改)。
清单4——RAP应用程序入口点
public class Application implements IEntryPoint {
public int createUI() {
Display display = PlatformUI.createDisplay();
return PlatformUI.createAndRunWorkbench( display, new ApplicationWorkbenchAdvisor());
}
}
同时,你需要删除清单3所示的扩展,同样,为了让RAP运行环境知道修改后的mail.Application是RAP应用程序运行入口点,你还需要用如清单5所示的扩展点注册该类
清单5——RAP应用程序入口注册
<extension
point="org.eclipse.rap.ui.entrypoint">
<entrypoint
class="mail.Application"
id="mail.Application"
parameter="rapMail">
</entrypoint>
</extension>
上面的parameter可以为任意值,只要没有被其他的RAP应用程序用过,后面你运行RAP应用程序的时候会用到parameter。
第三步:修改其他有编译错误的地方。剩下还有二个地方出现错误,一个是plugin.xml中的扩展org.eclipse.ui.bindings,这个只是将快捷键绑定到菜单的扩展点,而且目前在RAP中不被支持,你可以将其注释掉或干脆删掉。另外一个是类ApplicationActionBarAdvisor,由于目前RAP目标平台中的的类ActionFactory没有ABOUT成员,为简单起见,直接将makeActions方法中的两条相关语句注释掉,同时,将fillMenuBar方法中的最后一条语句注释掉,清单6是修改后的ApplicationActionBarAdvisor类
清单6——修改后的ApplicationActionBarAdvisor
protected void makeActions(final IWorkbenchWindow window) {
exitAction = ActionFactory.QUIT.create(window);
register(exitAction);
// aboutAction = ActionFactory.ABOUT.create(window);
// register(aboutAction);
newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
register(newWindowAction);
openViewAction = new OpenViewAction(window, "Open Another Message View", View.ID);
register(openViewAction);
messagePopupAction = new MessagePopupAction("Open Message", window);
register(messagePopupAction);
}
protected void fillMenuBar(IMenuManager menuBar) {
MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP);
menuBar.add(fileMenu);
// Add a group marker indicating where action set menus will appear.
menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
menuBar.add(helpMenu);
// File
fileMenu.add(newWindowAction);
fileMenu.add(new Separator());
fileMen
发表评论
-
如何让cxf客户端简单支持ssl
2012-06-26 22:52 1051首先生成自我签名的证书,关于如何使用keytool生成证 ... -
webservice cxf 开发实战
2012-05-30 15:51 800webservice cxf 开发实战,请看附件(含源码)。 -
JMeter 使用入门
2011-10-22 14:31 870JMeter 使用入门 <!-- google ... -
Java知识拾遗:三大框架的技术起源
2011-08-02 07:06 844Struts、Hibernate和Spring是我们Ja ... -
分享高效java开发者必备的资源列表
2011-07-14 00:01 733一. Java相关工具资源 1. Eclipse 开 ... -
Office等类型文件的在线编辑
2011-05-10 23:04 134415.4 Office等类型文件的在线编辑自从WebDA ... -
学习:二维码、QR码、J4L-QRCode、java
2011-04-15 18:52 33934开源码 Java 解码器(编码解码)下载:http://s ... -
使用 jsoup 对 HTML 文档进行解析和操作
2011-04-04 21:59 609jsoup 简介 Java 程序在解析 HTML 文档时 ... -
Java通过jsoup实现网页天气数据解析
2011-04-03 10:04 1480import java.io.IOException; ... -
免费的office开发控件weboffice
2011-02-11 14:32 1637免费的office开发控件weboffice,有Java版本的 ... -
Java程序把Word文档直接转换成HTML文件
2011-02-09 09:57 1178Jacob是Java和Windows下的Com桥,通过它我们可 ... -
Tomcat总死可以试一试调一下catalina.bat的这一行
2011-01-12 08:12 897set DEBUG_OPTS=-Xms512m -Xmx102 ... -
Tomcat内存溢出的原因以及解决办法
2010-12-29 13:57 923Tomcat内存溢出的原因 在生产环境中tomcat内存设置 ... -
PHP+MYSQL的OA为何没有Java的值钱
2010-12-25 11:33 886现在市场上的oa基本上可归结为两大阵营,即php阵营和java ... -
MyEclipse 6.0.1配置Tomcat 6服务器【图解】
2010-09-03 14:48 17411 从菜单[Windows]选择[Preferences. ... -
一个Java Web搜索程序
2010-07-20 10:01 1093这是一个web搜索的基本程序,从命令行输入搜索条件(起始的UR ... -
java 查询可用域名
2010-07-20 09:48 1488这段时间在注册域名,咱起步晚,好用的域名都给别人注册了。 想 ... -
使用RSA算法进行加密和解密
2010-07-20 09:36 1733用RSA算法进行加密和解密 一、 生成公钥和私钥 ... -
用javascript与java进行RSA加密与解密
2010-07-19 08:47 1019这几天一直做安全登录,网上查了好多资料,不尽如意。 ... -
公钥加密私钥解密&私钥加密公钥解密
2010-07-16 16:20 1598公钥加密体制1、公钥加密体制用于保密性时,就是公钥加密,私钥解 ...
相关推荐
5. 编译和运行RCP应用程序,查看结果。 RCP应用程序的优点包括: * 高度灵活和可扩展性 * 可以快速开发企业应用程序 * 提供了完善的企业应用解决方案 * 可以与其他技术集成,例如Spring和Hibernate RCP应用程序的...
由于是基于Java构建,RCP应用能在Java EE环境中运行,同时具备B/S系统的部署便捷性和C/S系统的用户界面丰富性。它允许开发人员专注于核心功能的编写,因为RCP已经提供了大约80%的基础框架代码。RCP还支持跨平台迁移...
Web端通常基于B/S架构(Browser/Server),用户通过浏览器即可访问和操作。在这个系统中,"tpt-web端源码.zip"包含了前端界面和后端服务器逻辑。前端可能采用了HTML、CSS和JavaScript,构建了用户友好的交互界面,而...
传统的客户端/服务器(C/S)架构和浏览器/服务器(B/S)架构在面对复杂的业务场景时往往显得力不从心。 #### 二、Eclipse RCP 技术 Eclipse Rich Client Platform (RCP) 是一种用于构建富客户端应用程序的新兴中间件...
- **胖客户端(RCP)**:需要在计算机上安装程序才能运行,如桌面应用程序。优点是可以高效使用软件功能,但缺点是需要安装且不易跨平台使用。 - **瘦客户端(TCP)**:不需要在客户端安装程序,只要有浏览器就能使用...
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle包含自己的类加载器和资源。这些bundle可以通过动态安装、启动、停止、更新和卸载...
- 采用B/S架构,即浏览器/服务器架构,客户端通过浏览器访问服务器端的应用程序,服务器端处理请求后将结果返回给客户端。 - 系统主要分为前端展示层、业务逻辑层和数据访问层。 - 前端展示层负责用户交互和页面...
- **现有类型系统的OSGI开发**:讨论了如何将OSGI技术应用于不同的应用场景,如B/S、C/S和嵌入式系统。 #### 3. OSGI框架介绍 - **Equinox**:Eclipse平台的默认OSGI实现,广泛用于开发Eclipse插件和RCP(Rich ...
服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。示例图: ![API网关]...
2. **`finger`** - 查询远程主机上用户的登录信息,虽然安全性较低,但在特定场景下仍有应用。 3. **`ftp`** - 文件传输协议客户端,用于在不同计算机之间传输文件。 4. **`ifconfig`** - 配置网络接口的工具,...