天天看點

Eclipse開發rap的簡單例子

轉帖:http://www.ibm.com/developerworks/cn/opensource/os-eclipse-richajax1/

作為一種使基于 Web 的應用程式更加生動的方法,Asynchronous JavaScript + XML (Ajax) 和 Web 2.0 的概念已經在開發社群中廣泛應用。富 Ajax 平台 (RAP) 是一種使用 Eclipse 開發模型來建構啟用 Ajax 的 Web 應用的方式。本文将介紹 RAP,說明如何設定 RAP 開發環境,提供一些示範以及一些易于了解的示例。

RAP 項目旨在使開發人員能夠使用 Eclipse 開發模型建構富 Internet 應用程式。“Eclipse 開發模型” 的确切含義是什麼?RAP 允許開發人員使用豐富的 Java™ 庫和 Eclipse API 建構基于浏覽器的 Ajax 應用程式。它通過提供 SWT、JFace 和 Eclipse Workbench 的基于 Web 的實作來提供此項功能。本文的目的在于通過一些簡單示例介紹 RAP。

Eclipse開發rap的簡單例子
請通路 Ajax 技術資源中心,這是有關 Ajax 程式設計模型資訊的一站式中心,包括很多文檔、教程、論壇、blog、wiki 和新聞。任何 Ajax 的新資訊都能在這裡找到。
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
訂閱 Ajax 相關文章和教程的 RSS 提要
Eclipse開發rap的簡單例子

設定兩個步驟

RAP 的設定非常簡單,隻需要執行兩個步驟:下載下傳 RAP 并配置 Eclipse 以使用 RAP。

第 1 步:下載下傳 RAP

從 Eclipse.org 獲得 RAP。建議您擷取最新的穩定裡程碑版本。對于本文,我們使用的是 1.0 發行版。下載下傳了包含 RAP 目标平台的歸檔檔案後,将其解壓縮到所選目錄中(參見圖 1)。此目錄十分重要,因為這将是您在下一步中設定目标平台時使用的目錄。

圖 1. RAP 目标

Eclipse開發rap的簡單例子

第 2 步:設定目标平台

Eclipse Plug-in Development Environment (PDE) 将使用目标平台的概念。目标平台隻是由一組表示待開發内容(也就是目标)的插件組成的。預設情況下,目标平台被設為針對目前運作的 Eclipse 執行個體。這意味着目前開發的插件應當運作在目前運作的執行個體中。目标平台的靈活之處在于它可以被更改。例如,您可以将目标平台設為針對 Eclipse V3.2 安裝或者甚至其他産品的運作時(這種技巧使您不管開發什麼内容都可以使用最新的 Eclipse)。

在本例中,我們以 RAP 平台為目标,因為我們要針對它進行開發。為此,需要将目标平台首選項 (Window > Preferences... > Plug-in Development > Target Platform) 設為第 1 步中 RAP 插件的解壓縮目錄(參見圖 2)。

圖 2. 将 RAP 設為目标平台

Eclipse開發rap的簡單例子

現在您已經正确設定了目标平台,可以開發 RAP 應用程式了。但是在開始檢視代碼之前,讓我們先來看一個簡單示範,了解 RAP 可以做什麼并熟悉如何啟動基于 RAP 的應用程式。

Eclipse開發rap的簡單例子

RAP 與 Google Web Toolkit 的比較

Google Web Toolkit (GWT) 和 RAP 的相似之處在于它們都允許使用 Java 來編寫富 Internet 應用程式的代碼。最大的差别在于 GWT 運作在客戶機上,而 RAP 主要運作在伺服器上。由于 RAP 運作在伺服器上,是以允許您通路豐富的 Java API 并允許通過 OSGi 使用著名的 Eclipse 插件模型。另一種思路是用 Eclipse 術語考慮兩者的差别:GWT 類似一個獨立的 SWT 應用程式(即,隻是一個小部件工具包),而 RAP 為 Web 應用程式啟用了一種 RCP 樣式的方法。

Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
回頁首

示範

體驗 RAP 的第一步是檢視一個示範。要與 RAP 互動,需要建立一個啟動配置來啟動 RAP。為此,需要打開 Run 對話框 (Run > Open Run Dialog...) 并建立一個新的 OSGi 架構啟動配置。完成後,需要確定這些 VM 參數已設定:

-Dorg.osgi.service.http.port=8000 -Dosgi.noShutdown=true

(參見圖 3)。這些參數将使 RAP 可以在端口 8000 上啟動并阻止 Eclipse 在 RAP 啟動後立即關閉。

圖 3. RAP 啟動配置

Eclipse開發rap的簡單例子

最後,可以啟動浏覽器并指向

http://localhost:8000/rap?startup=controls

來檢視控件示範(參見圖 4)。該示範基于 SWT Examples 集合中著名的

ControlExample

圖 4. RAP 控件示範

Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
回頁首

示例應用程式

我們将檢視兩個示例,它們都是基于 PDE 所提供的一些 Rich Client Platform (RCP) 模闆。

Hello World 示例

傳統的程式設計示例通常都是 Hello World 示例。我們首先将說明運作簡單 RAP 應用程式的方法。

圖 5. RAP 版 Hello World

Eclipse開發rap的簡單例子

RAP 版與 RCP 版的主要差别在于插件依賴性和應用程式入口點。如果檢視插件清單(參見清單 1),我們可以看到具有不同的依賴性。

清單 1. RAP Hello World 依賴性 (MANIFEST.MF)

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Helloworld Plug-in
Bundle-SymbolicName: rap.helloworld; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: rap.helloworld.Activator
Require-Bundle: org.eclipse.rap.ui
Eclipse-LazyStart: true
      

注意到對

org.eclipse.rap.ui

的依賴性了麼?那是類似于 RCP 庫中的标準

org.eclipse.ui

插件的 RAP 插件。如果熟悉 OSGi 和

Import-Package

檔案頭,則根本無需依賴于特定的插件;您可以隻依賴需要的包。這十分重要,因為您可以用一種既能在 RAP 中工作又能在 RCP 中工作的方法來構造代碼。例如,如果檢視 RAP(參見清單 2)和 RCP(參見清單 3)中的工作區顧問程式 (workbench advisor) 代碼,則會看到相似的代碼和導入包。

清單 2. RCP 工作區顧問程式

import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
        super(configurer);
    }

    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
        return new ApplicationActionBarAdvisor(configurer);
    }
    
    public void preWindowOpen() {
        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
        configurer.setInitialSize(new Point(400, 300));
        configurer.setShowCoolBar(false);
        configurer.setShowStatusLine(false);
        configurer.setTitle("Hello RCP");
    }
}    	
      

清單 3. RAP 工作區顧問程式

import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
        super(configurer);
    }

    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
        return new ApplicationActionBarAdvisor(configurer);
    }
    
    public void preWindowOpen() {
        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
        configurer.setInitialSize(new Point(400, 300));
        configurer.setShowCoolBar(false);
        configurer.setShowStatusLine(false);
        configurer.setTitle("Hello RAP");
    }
}    	
      

RAP 與 RCP 應用程式之間的另一個主要差别是入口點(類似于 Java 語言中的

main(String[] args)

方法)。在 RCP 中,我們有用于定義

IApplication

(注意,對于早于 Eclipse V3.3 的版本,此接口被稱為

IPlatformRunnable

)的

org.eclipse.core.runtime.applications

擴充點。RAP 中與 RCP 應用程式等效的是

org.eclipse.rap.ui.entrypoint

擴充點,該擴充點将定義

IEntryPoint

。如果檢視 RCP 上下文(參見清單 4)和 RAP 上下文(參見清單 5)中的典型入口點代碼,您會發現存在相似之處。在兩個例子中,我們都将建立一個視圖和工作區以運作工作區顧問程式。

清單 4. RCP 應用程式入口點 (org.eclipse.core.runtime.applications)

public class Application implements IApplication {

	public Object start(IApplicationContext context) throws Exception {
		Display display = PlatformUI.createDisplay();
		try {
			int returnCode = PlatformUI.createAndRunWorkbench(display, 
			new ApplicationWorkbenchAdvisor());
			if (returnCode == PlatformUI.RETURN_RESTART)
				return IApplication.EXIT_RESTART;
			else
				return IApplication.EXIT_OK;
		} finally {
			display.dispose();
		}
		
	}

	public void stop() {
		final IWorkbench workbench = PlatformUI.getWorkbench();
		if (workbench == null)
			return;
		final Display display = workbench.getDisplay();
		display.syncExec(new Runnable() {
			public void run() {
				if (!display.isDisposed())
					workbench.close();
			}
		});
}    	
      

清單 5. RAP 應用程式入口點 (org.eclipse.rap.ui.entrypoint)

public class Application implements IEntryPoint {

	public Display createUI() {
		Display display = PlatformUI.createDisplay();
		PlatformUI.createAndRunWorkbench( display, new ApplicationWorkbenchAdvisor() );

     		return display;
	}
}
      

RCP 郵件示例

著名的 RCP 郵件 示例(參見圖 6)在經過少量更改後能夠在 RAP 環境内運作(參見圖 7)。此示例表明視圖、透視圖、編輯器等工作區概念可以在 RAP 中使用(有關概念映射,請參見表 1)。您可以獲得郵件示例和先前示例的 源代碼 進行修改。

表 1. 比較 RAP 與 RCP

RAP RCP
OSGi(伺服器端) OSGi
Standard Widget Toolkit (SWT) RAP Widget Toolkit (RWT)
JFace JFace
工作區 Web 工作區

圖 6. RCP 郵件示例

Eclipse開發rap的簡單例子

圖 7. RAP 郵件示例

Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
Eclipse開發rap的簡單例子
回頁首

結束語

本文通過幾個簡單的示例和示範介紹了 RAP。RAP 允許在 Eclipse 中重用您現有的技能并建立富 Internet 應用程式。RAP 還使您可以用能夠在桌上型電腦 (RCP) 和浏覽器 (RAP) 之間重用的方法構造代碼。實質上,RAP 現在将把 Eclipse 引入到浏覽器和 Web 2.0 陣營中。

繼續閱讀