`
snoopy7713
  • 浏览: 1152052 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

equinox环境下web应用资源的部署

    博客分类:
  • OSGi
阅读更多

osgi的equinox实现环境下,web服务器和web应用都是以osgi的bundle的形式部署到equinox环境中的。

在equinox下部署web服务器的资源与非equinox(osgi)环境下有一些不同,这为使用Spring+Struts+Hibernate的应用向equinox环境转移带来了一定的困难。而在spring中使用acegi的应用的转换麻烦要更多一些。

equinox环境自带了jetty 5.X 作为默认的web服务器。

OSGi中在org.osgi.service.http.HttpService接口中提供向web服务器部署资源的两个方法:registerServlet(...)和registerResources(...),为了看得清晰省略了两个方法中的形参列表,在下面会给出。

从这两个方法的命名上可以看出,equinox实现了HttpService接口的类,可以提供两种类型资源的部署(或者说注册),一种是静态资源Resources对应registerResources(...)方法;另一种是动态资源Servlet对应registerServlet(...)。

1、注册静态资源

registerResources(String alias, String name, HttpContext context)

静态的资源是以文件形式存在的、能被web服务程序以文件流的形式读取的内容。比如,html,image,css,javascript,properties等静态的文件。

参数说明:

A、alias

alias 是请求的URL中的一部分,可以理解为URL相对路径。
比如,访问http://www.teamlet.org/index.html ,那么alias可以设置为 /index.html

约束:这个参数必须以"/"作为字符串的开始,可以是 "/",但是不可以以"/"结尾。
并且同一个alias不能注册两次。

正确的例子:  alias="/";              alias="/index.html";    alias="/test/index.html";

错误的例子: alias="test";         alias="/test/"

B、name

name是alias指定的文件的本地路径。
比如,alias为 /test.html ,而实际保存在bundle中根目录下的webroot中,因此name设定为 /webroot 。

C、context

context 是当前bundle中的上下文内容,可以设为null。当设定为null,环境将自动生成一个默认的context。
会在后面的介绍中详细说明自定义context的用法。

2、注册动态资源

registerServlet(String alias, Servlet servlet, Dictionary initparams, HttpContext context)

其他非静态资源都以servlet的形式部署(注册)。比如,serlvet,filter,listener等。

registerServlet 方法的第二个参数要求是Servlet类型的参数,因此如果注册listener、filter或者静态的内容等需要使用由equinox提供的Servlet适配器。

 

equinox提供了几个servlet的适配器(adaptor),以满足需要初始参数的servlet、需要contextPath的servlet以及Listener和Filter的注册需要。

由于web服务器--jetty和web应用是分别处在不同的bundle中,每个bundle都是由独立的classLoader来加载资源的,所以,即使在web应用的bundle内通过Spring将servlet、fitler、listener加载,对于web服务器--jetty的bundle来说也是不可见的。必须使用registerServlet进行部署才能让jetty识别servlet、listener和filter。

在jetty的资源部署时,一个URL的相对路径(即registerSerlvet和registerResources两个方法的参数alias)只能用一次。如果有两个servlet或者资源对应一个URL的相对路径就会报错。

Filter也存在同样的问题。用FilterServletAdaptor可以将一个servlet和Filter串接起来,在servlet之前先执行filter,然后servlet再处理。多个Filter的串接需要借助其他的方式实现(后面会在其他文章中说明)。这个filter的串接在acegi中是要使用的。

Acegi是通过FilterToBeanProxy将Servlet容器和Spring容器结合起来。FilterToBeanProxy将拦截的请求通过filterChainProxy发给一串filter处理。在非OSGi的环境中,由于是一个jvm环境,web服务器可以识别并使用由spring载入的filter链,而在equinox环境中web服务器--jetty无法使用另一个bundle中未经过registerServlet注册的任何servlet和filter。因此需要使用equinox提供的几个ServletAdaptor来处理。

更多使用举例和方法说明请见后续文章。

<完>

分享到:
评论

相关推荐

    osgi在web容器中部署的例子

    4. 部署Web应用:如果`bridge.war`是一个Web应用,需要将其部署到Tomcat,这样它就能与OSGi容器内的bundle交互。 5. 配置依赖关系:确保所有的bundle都正确声明了它们的依赖,并且在容器中可用。OSGi容器会自动解决...

    基于OSGI的Web开发例子

    5. 测试“Hello World”:通过访问特定的URL,验证“Hello World”程序是否正常工作,确保OSGi环境下的Web应用已经成功部署。 在OSGi环境下开发Web应用的好处在于,我们可以独立更新和管理各个组件,避免了传统的...

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

    6. **开发和部署**: 使用这些jar文件,开发者可以按照博客"OSGi环境下建立Web工程的Hello World"中的步骤,创建并部署OSGI兼容的Web应用。这通常涉及编写bundle的MANIFEST.MF文件来声明导出和导入的包,以及如何配置...

    Equinox OSGi应用嵌入Jersey框架搭建REST服务

    在本文中,我们将讨论如何在Equinox OSGi环境中嵌入Jersey框架来构建RESTful Web服务。Jersey是JAX-RS(Java API for RESTful Web Services)规范的参考实现,它提供了一种创建高效、高质量REST服务的方法。 首先,...

    equinox-SDK-Oxygen

    OSGi是一种模块化系统,用于Java应用程序的构建、部署和管理,它提供了动态发现和依赖管理的能力,使得开发者可以创建更灵活、可扩展且易于维护的应用程序。 标题中的"equinox-SDK-Oxygen"指的是基于Eclipse Oxygen...

    OSGI应用程序

    总的来说,配置一个基于Eclipse Equinox OSGi的Web应用程序涉及对OSGI基本概念的理解、Eclipse Equinox的使用、Web服务的封装以及OSGI环境下的服务注册和发现。通过这种方式,你可以构建一个高度模块化、可扩展且...

    pax-web基本配置包

    - 创建OSGi bundle,包含Web应用的类和资源。 - 配置MANIFEST.MF,声明导出的包和服务。 - 编写Web组件,如Servlet和Filter。 - 使用Pax Web提供的API注册Web组件。 - 利用pax-runner进行测试和调试。 **总结** ...

    采用共享jar包部署struts2+spring集成项目会遇到的问题

    在开发Java Web应用程序时,Struts2和Spring的集成是一个常见的选择,它们分别负责MVC框架和依赖注入。然而,在采用共享JAR包部署这样的集成项目时,可能会遇到一些问题。这篇博客文章“采用共享jar包部署struts2+...

    The Rich Ajax Platform

    ### 关于“The Rich Ajax Platform”(富Ajax平台)的关键知识点 #### 一、概述与背景 《The Rich Ajax Platform》是一篇关于如何...此外,RAP还支持多用户环境下的高效资源管理,使得其成为企业级Web应用的理想选择。

    WEB容器托管OSGi容器(轻量级集成方式)

    标题中的“WEB容器托管OSGi容器(轻量级集成方式)”是指在Web应用程序服务器(如Tomcat、Jetty等)中嵌入OSGi(Open Service Gateway Initiative)框架,实现服务组件的轻量化管理和部署。OSGi是一种动态模块化系统...

    equinox-jetty-birt:BIRT 报告简单的运行时示例

    它被广泛用于Web应用程序的部署,特别是对于快速开发和测试环境。在这个示例中,Jetty被用来托管BIRT查看器,使用户可以通过Web浏览器访问并交互报表。 **BIRT** BIRT是Eclipse基金会的一个开源项目,用于创建企业...

    spring osgi相关资源

    它允许开发者使用熟悉的Spring配置来定义服务和引用,简化了OSGi环境下的应用开发。 2. 自动化服务注册和发现:Spring DM会自动将Spring Bean注册为OSGi服务,并自动发现其他服务进行注入,降低了服务集成的复杂度。...

    OSGI整合Spring、Mybatis、Spring MVC实现一个登录应用案例

    Spring MVC是Spring框架的一部分,用于构建Web应用程序。它处理HTTP请求,将请求映射到控制器,然后通过模型和视图进行响应。在OSGI中,Spring MVC可以被包装成一个bundle,与其他服务协同工作,提供Web接口供用户...

    equinox_osgi_skeleton:这个git仓库包含一个带有Equinox OSGi最小设置的Eclipse工作区

    Equinox OSGi是IBM公司开发的一个开源实现,它是OSGi规范的主要实现之一,用于创建模块化Java应用程序。OSGi(Open Services Gateway Initiative)是一种Java技术,它将JVM(Java虚拟机)转换为模块化的运行时环境,...

    java网络服务器wab app,个人网站服务器

    Eclipse是一款广泛使用的开源IDE,对于Java EE开发者来说,它提供了丰富的工具集来开发、调试和部署Java Web应用程序。Eclipse中的Java EE版本包含了Web项目创建向导、内置服务器支持、自动代码完成、以及对JSP、...

    jetty-distribution-9.4.28.v20200408.zip

    5. **OSGi集成**:Jetty可以与OSGi(Open Service Gateway Initiative)框架无缝集成,如Equinox和 Felix,使得Web应用可以在模块化的环境中运行。 6. **JMX支持**:Jetty集成了Java Management Extensions (JMX),...

    RAP 打成war并发布到tomcat(操作步骤)

    首先,你需要了解WAR(Web Application Archive)文件,它是Java Web应用的标准打包格式,包含了所有必要的资源、类文件和配置文件。对于RAP应用,WAR文件包含了Servlet桥接器,使得RAP应用能在Servlet容器(如...

    OSGI Server

    通过ServletBridge,开发者可以将OSGI服务与传统的Web应用部署模型相结合,提供更灵活的应用管理。 **嵌入HTTP服务器** 在Equinox中嵌入HTTP服务器提供了另一种选择,允许开发者自定义HTTP服务的实现。这可能包括...

    关于OSGI的详细资料

    6. **测试部署**:在Equinox环境中安装并启动创建的bundle,进行测试。 #### 示例代码简述 下面展示了一个简单的`HelloServlet`类,该类继承自`HttpServlet`,并重写了`doGet`和`doPost`方法: ```java public ...

Global site tag (gtag.js) - Google Analytics