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

2024-01-15 08:38

本文主要是介绍equinox环境下web应用资源的部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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来处理。

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

<完>

这篇关于equinox环境下web应用资源的部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608297

相关文章

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使