`
sunxboy
  • 浏览: 2870173 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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

例子项目下载(链接)。

参考链接:

 
分享到:
评论

相关推荐

    OSGI中包含web服务器配置需要的jar.zip

    OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序以模块化的方式构建,每个模块称为一个bundle。在OSGI环境中,你可以动态地安装、启动、更新和卸载这些bundle,而无需重启...

    equinox快速入门

    OSGi(Open Service Gateway Initiative)是一种模块化系统,用于Java应用程序的组件化和动态管理,而Equinox是OSGi规范的一种实现,广泛应用于Eclipse IDE、服务器平台以及嵌入式系统。 【描述】虽然描述部分为空...

    tomcat-osgi.rar_OsgiContentFactory_osgi_osgi tomcat 集成_osgi tom

    文件“tomcat_osgi.doc”可能包含详细的步骤指南,涵盖了配置Tomcat以支持OSGi、安装必要的库、配置OSGi框架(如Equinox或Felix)、以及如何打包和部署OSGi bundle到Tomcat等内容。文档可能还会讲解如何解决常见的...

    osgi 在web容器中部署

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发人员将应用程序分解为一组可独立更新和管理的小型服务。在Web容器中部署OSGi应用,特别是像Tomcat这样的流行Servlet容器,可以提高应用的...

    OSGI Server

    ServletBridge是OSGI服务器的一个关键特性,它允许基于OSGI的Web应用程序在Servlet容器(如Tomcat、Jetty等)中运行。通过ServletBridge,开发者可以将OSGI服务与传统的Web应用部署模型相结合,提供更灵活的应用管理...

    osgi-jetty-9.3.10环境配置-注册Servlet工程示例

    Jetty是一款轻量级、高性能的HTTP服务器和Servlet容器,它能够直接在OSGi环境中运行,提供对Web应用程序的支持。在本示例中,我们将探讨如何在OSGi环境下配置Jetty 9.3.10,创建一个注册Servlet的工程,并进行Jetty...

    tomcat-osgi压缩包

    这个压缩包可能包含了预配置的Tomcat服务器,示例bundle,以及必要的文档或引导步骤,帮助开发者立即开始他们的OSGi开发之旅。 集成OSGi的Tomcat服务器有一些显著优点,如: 1. **模块化**:允许开发人员将复杂的...

    tomcat 集成 osgi服务,示例源码

    OSGi是一种模块化系统,它允许Java应用程序以组件的形式进行构建和部署,便于管理和更新。 描述中的"源码,文档,配置文件,给初学osgi的朋友"进一步确认了资源的内容,包括源代码、相关文档、配置文件,这些都是学习...

    OSGI-Jetty示例,Java源码,很得劲

    示例可能包含了如何配置OSGI容器、导入Jetty bundle、编写和部署Web应用以及如何在OSGI环境中启动和管理Jetty服务器的详细步骤。通过深入研究提供的源码,你可以进一步理解OSGI和Jetty的集成原理,这对于理解和开发...

    构建基于Maven的OSGI

    首先,我们需要创建一个新的Maven项目,并选择OPS4J的Pax Construct作为构建OSGi应用程序的基础。具体步骤如下: 1. **在Eclipse中创建项目**: - 打开Eclipse,选择`File &gt; New &gt; Project`。 - 在弹出的窗口中...

    OSGi Modularity - Tutorial

    Eclipse Equinox是基础OSGi规范的参考实现,并且是Eclipse应用程序运行的运行时环境。在Eclipse中,最小的模块化单位是插件(Plugin),在很多情况下,插件(Plugin)和模块(Bundle)这两个术语可以互换使用。 ...

    基于OSGI的Web开发例子

    在IT行业中,OSGi(Open Services Gateway Initiative)是一种模块化软件开发的标准,它允许开发者将应用程序分解为可独立更新和管理的小型组件,称为服务或bundle。这些组件可以在运行时动态地安装、卸载和升级,极...

    osgi在web容器中部署的例子

    OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许开发人员将应用程序分解为一组可独立更新和管理的小型、独立组件,称为bundle。这些bundle之间可以通过服务接口进行交互,使得代码...

    四大OSGI框架最新技术对比分析

    Equinox 是一种开源的 OSGi 实现,广泛应用于各种 Java 应用程序中,特别是 Eclipse 工具集的基础。它支持模块化架构,使得应用程序可以轻松地扩展和维护。 ### 2.2 优秀特性 - **与 Eclipse IDE 的紧密集成**:...

    OSGI错误分析解决

    通过理解Bundle的生命周期、服务模型以及JMX的使用,开发者可以有效地定位并解决问题,确保OSGI应用程序的稳定运行。在实践中,不断学习和熟悉OSGI的规范和最佳实践将有助于减少这类问题的发生。

Global site tag (gtag.js) - Google Analytics