开发者社区> 青夜之衫> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

例子项目源代码下载(链接)。

参考链接:

本文转自博客园八进制的博客,原文链接:Equinox OSGi服务器应用程序的配置步骤,如需转载请自行联系原博主。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《深入理解OSGi:Equinox原理、应用与最佳实践》一1.1 什么是OSGi
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第1章,第1.1节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1169 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一1.2 为什么使用OSGi
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第1章,第1.2节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
963 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一1.3 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第1章,第1.3节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
751 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一3.7 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第3章,第3.7节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
744 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一导读
笔者自2007年接触OSGi以来,曾在数个大型系统中使用过OSGi作为软件的基础架构,这一方面使笔者深刻感受到了OSGi带来的诸多好处以及OSGi设计思想的魅力;另一方面也使笔者注意到OSGi的入门门槛相对较高,如果没有足够的指导材料,开发人员从零开始学习并探索出OSGi的最佳实践需要很高的成本。
838 0
《深入理解OSGi:Equinox原理、应用与最佳实践》一2.8 本章小结
本节书摘来自华章出版社《深入理解OSGi:Equinox原理、应用与最佳实践》一 书中的第2章,第2.8节,作者:周志明 谢小明,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
716 0
Eclipse 使用 Maven 构建动态 Web 工程,默认无 java 目录的解决方法
Eclipse 使用 Maven 构建动态 Web 工程,默认无 java 目录的解决方法 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备、绿色教育的研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
1255 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载