1. 程式人生 > >基於OSGi的Web模組開發基本流程

基於OSGi的Web模組開發基本流程

由於專案的需要,寫了一個簡單的開發基於OSGi的Web模組開發示例用於專案組交流,最初發布在自己的個人部落格上(http://www.tofacto.org/2012/02/189.html),在CSDN上同時釋出出來期望能夠拋磚引玉,或者能給大家帶來一點啟發。

一、生成專案:

1、 Eclipse選單:File -> new -> project -> Plug-in Project,如圖:1.1

生成Plug-in Project

圖 1.1

2、 填寫專案名稱,並在“Target Platform”部分選擇使用“equinox”框架,如圖: 1.2

選擇Target Platform

圖 1.2

3、 選擇“Finish”生成專案。

二、開發準備:

1、 開啟“META-INF”下的檔案“MANIFEST.MF”,在程式碼區選擇“Dependencies”標籤。

2、 在Dependencies中新增開發Web所需依賴的bundle,完成後如圖2.1:

  • javax.servlet;bundle-version="2.5.0",
  • org.eclipse.equinox.http.jetty;bundle-version="2.0.100",
  • org.eclipse.equinox.http.registry;bundle-version="1.1.100",
  • org.eclipse.equinox.http.servlet;bundle-version="1.1.200",
  • org.eclipse.equinox.jsp.jasper;bundle-version="1.0.300",
  • org.eclipse.equinox.jsp.jasper.registry;bundle-version="1.0.200",
  • org.apache.commons.logging;bundle-version="1.0.4",
  • org.apache.commons.el;bundle-version="1.0.0"配置Dependcies

圖 2.1

3、 選擇“Overview”標籤,單擊“Extension/Extension Point Content”中的“Extensions”,在彈出視窗中選擇“Yes”以顯示被隱藏的“Extensions”、“Extensions Points”和“Plugin。xml”標籤。4、 在“Extensions”標籤單擊“Add”按鈕,在彈出視窗中選擇“org.eclipse.equinox.http.registry.servlets”,完成後的“Extensions”標籤如圖2.2,儲存可開啟plugin.xml如圖2.3:

Extensions

圖 2.2

plugin.xml

圖2.3

三、 配置執行/除錯環境:

1、 選單欄選擇“run”->“Run Configuration”開啟執行環境配置視窗,右鍵單擊“OSGi Framework”並在彈出選單中選擇“new”。

2、 取消所有“Target Platform”中bundle的選中,然後新增如下bundle:

  • org.eclipse.osgi_3.7.1.R37x_v20110808-1106
  • org.eclipse.osgi.services_3.3.0.v20110513
  • javax.servlet_2.5.0.v201103041518
  • javax.servlet.jsp_2.0.0.v201101211617
  • org.mortbay.jetty.util_6.1.23.v201012071420
  • org.mortbay.jetty.server_6.1.23.v201012071420
  • org.eclipse.equinox.common_3.6.0.v20110523
  • org.eclipse.equinox.http.jetty_2.0.100.v20110502
  • org.eclipse.equinox.http.servlet_1.1.200.v20110502
  • org.eclipse.equinox.http.registry_1.1.100.v20110502
  • org.eclipse.equinox.jsp.jasper.registry_1.0.200.v20100503
  • org.eclipse.equinox.jsp.jasper_1.0.300.v20110502
  • org.eclipse.equinox.registry_3.5.101.R37x_v20110810-1611
  • org.apache.jasper_5.5.17.v201101211617
  • org.apache.commons.el_1.0.0.v201101211617
  • org.apache.commons.logging_1.0.4.v201101211617

3、 此時web服務的預設埠為80,如此埠已被佔用可以在配置視窗中“Arguments”標籤下,在VM arguments部分填上“-Dorg.osgi.service.http.port=(埠號)”,如需在8080埠啟動服務則為:-Dorg.osgi.service.http.port=8080

4、 執行此配置環境,開啟瀏覽器,在位址列中填入:http://localhost:(埠號)/,如瀏覽器報404錯誤,則說明配置成功。

四、 編碼及執行:

1、 在src下建包,包內建立Servlet,示例程式碼如下:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author GAO Ming (http://www.tofacto.org)
 */

public class FirstServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/plain");
		PrintWriter out = resp.getWriter();
		out.println("Hello World!");
		out.flush();
		out.close();
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req, resp);
	}
}

2、 開啟“MANIFEST.MF”檔案,選擇“Extensions”標籤,編輯預設生成的Servlet對映,在class處填入剛完成的servlet的包名與類名,如:org.tofacto.demo.web.FirstServlet,在alias處填寫欲對映的url位置,如:/first3、 儲存後執行在第三部分配置的執行環境,然後開啟瀏覽器,在位址列中輸入http://localhost:8080/first,如無異常便看看到執行結果。 

五、 加入動態頁面-JSP

1、 在bundle的根下新建資料夾“WebRoot”,用於存放相應的jsp檔案。

2、 在WebRoot下新建並編輯jsp檔案

3、 開啟“MANIFEST.MF”檔案,選擇“Extensions”標籤,新增servlet對映,在class處填寫:org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/WebRoot/,在alias處填入:/*.jsp

4、啟動服務後便可在瀏覽器裡面直接訪問jsp頁面了。