RAP 可以讓開發(fā)人員使用JAVA API和按照Eclipse 插件的開發(fā)模式構(gòu)建基于AJAX的Web 2.0應(yīng)用程序,是的,你沒有看錯(cuò),其實(shí)RAP的工作原理是采用交叉編譯的方式將 Java 代碼生成JavaScript文件,底層基于Qooxdoo AJAX框架,這樣,我們就不必接觸JavaScript、CSS和處理Http的細(xì)節(jié)了,可以讓我們更關(guān)心程序的功能實(shí)現(xiàn),想起來(lái)的覺得很幸福。
RAP和RCP 一樣,運(yùn)行在Equinox框架上,Equinox是OSGI R4規(guī)范的實(shí)現(xiàn),是一個(gè)非常優(yōu)秀和成熟的OSGi框架,Eclipse 是通過這個(gè)框架實(shí)現(xiàn)靈活的擴(kuò)展性和插件的熱部署。RAP也支持Eclipse的大部分?jǐn)U展點(diǎn),其實(shí)RAP和RCP在架構(gòu)上非常的類似,下圖分別為RCP和RAP的架構(gòu)圖:
可以看出,這之間的整體架構(gòu)差別不大,RCP是基于SWT的,RAP是基于RWT的, RWT是實(shí)現(xiàn)了SWT功能的一個(gè)子集。其實(shí)這之間的使用方式都差不多。比如RWT也能和SWT一樣使用MVC的方式來(lái)創(chuàng)建表格。
RAP可以使用Servlet 編譯,支持Servlet 2.3、2.4和2.5規(guī)范,并且可以通過打包成war文件部署在服務(wù)器上,客戶端通過瀏覽器直接訪問,不過這里的客戶端和服務(wù)器的實(shí)現(xiàn)也不一樣,。下面分別是服務(wù)器和客戶端的實(shí)現(xiàn)。
服務(wù)器端:
客戶端:
別/RAP-ClientSide.jpg)
客戶端的功能比較簡(jiǎn)單,是通過Qooxdoo程序從服務(wù)器上更新信息并繪制出相應(yīng)的組件顯示在瀏覽器中。基本上只是負(fù)責(zé)提交和更新顯示數(shù)據(jù)的功能,服務(wù)器端的功能就比較復(fù)雜,比如要管理插件的生命周期,尋找新的插件并加載和管理系統(tǒng)的資源,還要處理多用戶環(huán)境,在不同Sessions之間處理 OSGI bundles 的關(guān)系。
RWT VS SWT:
控件:
RWT實(shí)現(xiàn)了SWT 中的大部分基本控件,使用方法大同小異,也提供了CTabFolder、CBanner自定義控件,RWT中的Tree和Table功能和SWT的的差不多,支持排序、過濾和直接編輯單元格,使用方式也一樣的。可以直接從SWT代碼復(fù)制到RWT程序中使用。布局:
RWP同樣可以像SWT一樣使用布局,布局的數(shù)據(jù)在服務(wù)器上計(jì)算處理,我們基本上不用擔(dān)心跨瀏覽器出現(xiàn)布局混亂的問題了,目前RWP支持下面的布局:
2 RowLayout
3 FillLayout
4 FormLayout
5 StackLayout
RWT中布局采用的計(jì)算算法和SWT一樣。
目前RWT支持以下事件類型:

2

3

4

5

6

RWT附加功能:
RWT提供了附加的API可以管理web 環(huán)境,我們可以調(diào)用RWT.java的getLifeCycle靜態(tài)方法獲得程序的生命周期控制類,直接操作程序的生命周期; 可以通過getResourceManager靜態(tài)方法獲得資源管理的控制類,手工管理系統(tǒng)資源,通過getSessionStore方法管理session資源;通過getRequest 方法處理用戶的請(qǐng)求getResponse處理服務(wù)器的響應(yīng)。假如我們從下面URL中得到請(qǐng)求的參數(shù)內(nèi)容:
http://localhost:8080/rap?startup=foo&var1=value1&var2=value2 可以調(diào)用
2 String var1 = request.getParameter( "var1" );
3 String var2 = request.getParameter( "var2" );
RAP.JFace vs RCP.JFace
RAP的JFace實(shí)現(xiàn)了RCPJFace的所有視圖查看器,比如TableViewer、TreeViewer等;
支持大多數(shù)的視圖概念,像:ContentProvider、LabelProvider、ColorProvider、ViewerFilter、DecoratingLabelProvider,
支持文本裝飾,比如文本框前面加個(gè)小燈泡提示
支持所有JFace的標(biāo)準(zhǔn)對(duì)話框,也支持自定義對(duì)話框。
支持向?qū)ы?yè)
支持附加視圖,比如 Outline,Properties視圖
編輯器支持:可使用多頁(yè)編輯器,支持繼承自ISaveablePart的視圖
支持透視圖:可支持透視圖切換器,透視圖擴(kuò)展點(diǎn)。
支持Eclipse 3.3的菜單框架:包括Commands和Handler,支持采用表達(dá)式來(lái)控制菜單是否可見和是否可用
支持Form表單樣式
還有一個(gè)殺手級(jí)的特性: 支持在后臺(tái)運(yùn)行Job,可以通過UI界面執(zhí)行長(zhǎng)時(shí)間任務(wù),支持Progress View 視圖。
如果你很喜歡RCP中JFace的Data Binding功能的話,在RAP中也可以實(shí)現(xiàn),通過RAP的附加插件可以讓你擁有RCP的數(shù)據(jù)綁定功能,并且可以運(yùn)用到目前所有的RAP控件中,
也許你看到這里的時(shí)候,上面的信息有些過時(shí)了,那有什么辦法呢,Eclipse 組織的動(dòng)作發(fā)展太快了,而且理念也非常的超前,應(yīng)該聽說(shuō)過E4吧,Eclipse 的下一代開發(fā)工具,可以在Web 瀏覽器中打開Eclipse 進(jìn)行開發(fā)了。持續(xù)關(guān)注Eclipse的發(fā)展,希望NetBeans不要落后的太遠(yuǎn)。