第一次體驗OSGI (Http應用)

OSGI最主要的是理解它的概念, 在理解完概念之後,開發完第一個小Demo, 基本上就知道下一步要如何下手了。

我在這裏要講的就是如何基於equinox開發一個web bundle.(equinox是OSGI的一個實現,由於eclipse是它的一個應用而聞名)

我是用eclipse 3.51來開發的,這點有時候很重要,equinox更新速度很快,如果沒有跟着教程用同樣的版本。常常會因爲找不到jar包或者調試方式有差異而使得開發起來不那麼順暢。

準備:
只要準備好基本的JDK環境和eclipse 3.51 開發境即可。

第一步:創建工程

4c9518da-6643-3e1d-8fb0-2279747a715e.jpg
你選擇的是一個eclipse plugin 項目.


16355e37-848c-3720-914f-200715fbc0ce.jpg
填好項目名稱,指定target platfrom 爲 OSGI framework

點擊兩次下一步,你的工程就建好了。

第二步:代碼實施
引入所需的bundle依賴

e74c59d3-5651-3aa5-8ec8-9cc2f7f6a988.jpg
這裏用的是jetty 的 http 實現


寫一個selvlet
com.webex.robet.servlet.ShowMessage


package com.webex.robet.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowMessage extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7035663685406738727L;

	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.doGet(req, resp);
		resp.setContentType("text/html");
		ServletOutputStream output = resp.getOutputStream();
		output.println("is that right?");
		output.close();
		return;
	}

}



在 web_files 目錄 放一個html文件
然後在根目錄下plugin.xml 內容如下:


<plugin>
	<extension point="org.eclipse.equinox.http.registry.resources">
		<resource alias="/files" base-name="/web_files" />
	</extension>
	<extension point="org.eclipse.equinox.http.registry.servlets">
		<servlet alias="/test" class="com.webex.robet.servlet.ShowMessage" />
	</extension>
</plugin>



第三步:查看實施情況

858368b4-2974-3f0c-bb87-87b141911601.jpg

選項所建項目,run as -> run config, 選擇作爲 osgi 工程運行。
爲避免出現bundle 依賴問題,點選 add required bundles 按鈕, 然後點 run

是否出現如下界面?


af73fc50-82e0-3aef-8ff6-e5f09c8420c1.jpg

輸入ss

255a49e8-e841-3bc7-8cdd-fed25f1430fb.jpg

出現類似上圖結果,表示你的應用已經起來了。

輸入 http://localhost/test 或 http://localhost/files/a.html 看看你的成就?


示例源碼下載:
http://dl.javaeye.com/topics/download/3c066f59-c154-3adf-9c17-f67468dadace











  • 4c9518da-6643-3e1d-8fb0-2279747a715e-thumb.jpg
  • 大小: 38.8 KB
  • 16355e37-848c-3720-914f-200715fbc0ce-thumb.jpg
  • 大小: 47.2 KB
  • e74c59d3-5651-3aa5-8ec8-9cc2f7f6a988-thumb.jpg
  • 大小: 22.1 KB
  • 858368b4-2974-3f0c-bb87-87b141911601-thumb.jpg
  • 大小: 131.8 KB
  • af73fc50-82e0-3aef-8ff6-e5f09c8420c1-thumb.jpg
  • 大小: 12.9 KB
  • 255a49e8-e841-3bc7-8cdd-fed25f1430fb-thumb.jpg
  • 大小: 91.3 KB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章