RAP 可以讓開(kāi)發(fā)人員使用JAVA API和按照Eclipse 插件的開(kāi)發(fā)模式構(gòu)建基于AJAX的Web 2.0應(yīng)用程序,是的,你沒(méi)有看錯(cuò),其實(shí)RAP的工作原理是采用交叉編譯的方式將 Java 代碼生成JavaScript文件,底層基于Qooxdoo AJAX框架,這樣,我們就不必接觸JavaScript、CSS和處理Http的細(xì)節(jié)了,可以讓我們更關(guān)心程序的功能實(shí)現(xiàn),想起來(lái)的覺(jué)得很幸福。
RAP和RCP 一樣,運(yùn)行在Equinox框架上,Equinox是OSGI R4規(guī)范的實(shí)現(xiàn),是一個(gè)非常優(yōu)秀和成熟的OSGi框架,Eclipse 是通過(guò)這個(gè)框架實(shí)現(xiàn)靈活的擴(kuò)展性和插件的熱部署。RAP也支持Eclipse的大部分?jǐn)U展點(diǎn),其實(shí)RAP和RCP在架構(gòu)上非常的類(lèi)似,下圖分別為RCP和RAP的架構(gòu)圖:
別/RCPvsRAPArch3.jpg)
可以看出,這之間的整體架構(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ī)范,并且可以通過(guò)打包成war文件部署在服務(wù)器上,客戶端通過(guò)瀏覽器直接訪問(wèn),不過(guò)這里的客戶端和服務(wù)器的實(shí)現(xiàn)也不一樣,。下面分別是服務(wù)器和客戶端的實(shí)現(xiàn)。
服務(wù)器端:
別/RAP-ServerSide.jpg)
客戶端:
客戶端的功能比較簡(jiǎn)單,是通過(guò)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的的差不多,支持排序、過(guò)濾和直接編輯單元格,使用方式也一樣的。可以直接從SWT代碼復(fù)制到RWT程序中使用。
布局:
RWP同樣可以像SWT一樣使用布局,布局的數(shù)據(jù)在服務(wù)器上計(jì)算處理,我們基本上不用擔(dān)心跨瀏覽器出現(xiàn)布局混亂的問(wèn)題了,目前RWP支持下面的布局:
1 GridLayout,
2 RowLayout
3 FillLayout
4 FormLayout
5 StackLayout
RWT中布局采用的計(jì)算算法和SWT一樣。
事件處理:
目前RWT支持以下事件類(lèi)型:
1
?SelectionListener
2
ControlListener
3
?ShellListener
4
?MenuListener
5
?ModifyListener
6
?VerifyListener ?
RWT附加功能:
RWT提供了附加的API可以管理web 環(huán)境,我們可以調(diào)用RWT.java的getLifeCycle靜態(tài)方法獲得程序的生命周期控制類(lèi),直接操作程序的生命周期; 可以通過(guò)getResourceManager靜態(tài)方法獲得資源管理的控制類(lèi),手工管理系統(tǒng)資源,通過(guò)getSessionStore方法管理session資源;通過(guò)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)用
1 HttpServletRequest request = RWT.getRequest();
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)控制菜單是否可見(jiàn)和是否可用
支持Form表單樣式
還有一個(gè)殺手級(jí)的特性: 支持在后臺(tái)運(yùn)行Job,可以通過(guò)UI界面執(zhí)行長(zhǎng)時(shí)間任務(wù),支持Progress View 視圖。
如果你很喜歡RCP中JFace的Data Binding功能的話,在RAP中也可以實(shí)現(xiàn),通過(guò)RAP的附加插件可以讓你擁有RCP的數(shù)據(jù)綁定功能,并且可以運(yùn)用到目前所有的RAP控件中,
也許你看到這里的時(shí)候,上面的信息有些過(guò)時(shí)了,那有什么辦法呢,Eclipse 組織的動(dòng)作發(fā)展太快了,而且理念也非常的超前,應(yīng)該聽(tīng)說(shuō)過(guò)E4吧,Eclipse 的下一代開(kāi)發(fā)工具,可以在Web 瀏覽器中打開(kāi)Eclipse 進(jìn)行開(kāi)發(fā)了。持續(xù)關(guān)注Eclipse的發(fā)展,希望NetBeans不要落后的太遠(yuǎn)。