Equinox OSGi伺服器應用程式的配置步驟 (支援JSP頁面)

來源:互聯網
上載者:User

本文介紹在Eclipse裡如何配置一個簡單的基於Eclipse Equinox OSGi實現的Web應用程式,在它的基礎上可以構造更加複雜的應用,本文使用的是Eclipse 3.3.1版本,如果你的Eclipse版本在3.2.0或以上應該都可以。

51CTO編輯精選:OSGi入門與實踐全攻略

一、支援靜態頁面和Servlet

1. 建立一個新的plugin項目, net.bjzhanghao.osgi.test,在嚮導第一步裡選中“This plug-in is target,在下一步的“Plug-in Options”裡選中“Generate an activator”。

 

2. 在例子項目的MANIFEST.MF裡添加如下依賴項目,這些項目都是Eclipse內建的:

org.eclipse.equinox.http.jettyorg.eclipse.equinox.http.servletorg.mortbay.jettyorg.apache.commons.loggingjavax.servletorg.eclipse.equinox.http.registry

3. 在例子項目根目錄下建立一個放置web檔案的目錄,如“web_files”,在這個目錄下寫一個簡單的index.html檔案。

4. 為項目建一個plugin.xml檔案,內容如下:

alias="/web"
base-name="/web_files"/>

注意,這時若MANIFEST.MF裡提示錯誤,只要在Bundle-SymbolicName這一行後面加上“;singleton:=true”即可解決。

5. 現在可以啟動這個應用程式了。在Eclipse菜單裡選擇“Run->Open Run Dialog...”,在左邊的 “OSGi Framework”項下建立一個新的啟動配置項,在右邊先點“Deselect All”清空所有複選框,然後在Workspace下選中自己的osgi項目,再點“Add Required Bundles”按鈕,Eclipse會自動把所依賴的項目選中。最後按“Debug”按鈕啟動,內嵌的jetty和我們的項目會一起被啟動。

 

6. 開啟瀏覽器,輸入“http://localhost/web/index.html”應該可以看到index.html裡的內容。

以上只驗證了靜態頁面,現在來配置一個servlet看看。

7. 在項目裡建立一個繼承自HttpServlet的類,覆蓋doGet()方法,內容是在網頁上列印一些文本。

8. 在項目的plugin.xml裡添加下面的內容,這些內容指定了servlet的訪問路徑和實作類別:

alias="/exampleServlet"
class="net.bjzhanghao.osgi.example.servlet.ExampleServlet"/>

9. 重新啟動項目,在瀏覽器裡輸入“http://localhost/exampleServlet”,應該可以看到servlet的輸出。

二、支援JSP頁面

10. 在index.html所在目錄下建立一個簡單的jsp檔案index.jsp

11. 開啟項目的MANIFEST.MF檔案,添加如下項目依賴:

org.eclipse.equinox.jsp.jasper,org.apache.jasper,org.eclipse.equinox.jsp.jasper.registry,javax.servlet.jsp,org.apache.commons.el,org.eclipse.equinox.http.helper,org.eclipse.osgi,org.eclipse.osgi.services

其中org.eclipse.equinox.http.helper需要從cvs裡下載得到(目前是在/cvsroot/eclipse下的 equinox-incubator目錄裡,以後可能會直接放到/cvsroot/eclipse下)。

12. 修改Activator,目的是註冊一個處理副檔名為.jsp類型的servlet,感覺這一步以後應該有更簡單的方法,例如通過擴充點。

public class Activator implements BundleActivator {

private ServiceTracker httpServiceTracker;

String jspContext = "/jsps";String jspFolder = "/web_files";

public void start(BundleContext context) throws Exception {httpServiceTracker = new HttpServiceTracker(context);httpServiceTracker.open();}

public void stop(BundleContext context) throws Exception {httpServiceTracker.open();}

private class HttpServiceTracker extends ServiceTracker {

public HttpServiceTracker(BundleContext context) {super(context, HttpService.class.getName(), null);}

public Object addingService(ServiceReference reference) {final HttpService httpService = (HttpService) context.getService(reference);try {HttpContext commonContext = new BundleEntryHttpContext(context.getBundle(), jspFolder);httpService.registerResources(jspContext, "/", commonContext);

Servlet adaptedJspServlet = new ContextPathServletAdaptor(new JspServlet(context.getBundle(), jspFolder),jspContext);httpService.registerServlet(jspContext + "/*.jsp",adaptedJspServlet, null, commonContext);} catch (Exception e) {e.printStackTrace();}return httpService;}

public void removedService(ServiceReference reference, Object service) {final HttpService httpService = (HttpService) service;httpService.unregister(jspContext);httpService.unregister(jspContext + "/*.jsp");super.removedService(reference, service);}}}

13. 開啟Debug對話方塊,選中workspace裡的例子osgi項目和org.eclipse.equinox.http.helper項目,再按“Add Required Bundles”按鈕,然後啟動程式。

14. 在瀏覽器裡輸入“http://localhost/jsps/index.jsp”,應該可以看到jsp輸出。

您正在閱讀:Equinox OSGi伺服器應用程式的配置步驟

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.