Equinox OSGi服务器应用程序的配置步骤

本文介绍在Eclipse里如何配置一个简单的基于Eclipse Equinox OSGi实现的Web应用程序,在它的基础上可以构造更加复杂的应用,本文使用的是Eclipse 3.3.1版本,如果你的Eclipse版本在3.2.0或以上应该都可以。

一、支持静态页面和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.jetty
org.eclipse.equinox.http.servlet
org.mortbay.jetty
org.apache.commons.logging
javax.servlet
org.eclipse.equinox.http.registry

3. 在例子项目根目录下创建一个放置web文件的目录,如“web_files”,在这个目录下写一个简单的index.html文件。

4. 为项目建一个plugin.xml文件,内容如下:

< plugin >
   < extension  point ="org.eclipse.equinox.http.registry.resources" >
     < resource
       alias ="/web"
      base-name ="/web_files" />
   </ extension >
</ plugin >

注意,这时若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的访问路径和实现类:

< extension  point ="org.eclipse.equinox.http.registry.servlets" >
     < servlet
       alias ="/exampleServlet"
      class ="net.bjzhanghao.osgi.example.servlet.ExampleServlet" />
</ extension >

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输出。

例子项目下载(链接)。

参考链接:

 

http://www.cnblogs.com/bjzhanghao/archive/2007/10/28/940622.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值