首页 > 其他分享 >OSGI开发web应用

OSGI开发web应用

时间:2022-11-10 22:33:43浏览次数:48  
标签:web http Bundle framework 应用 org OSGI osgi


开发web的两种方式

基于OSGI开发B/S应用有两种方式:

1)在OSGI框架中嵌入Http服务器

2)在Servlet容器中嵌入OSGI框架

Http服务器嵌入到OSGI框架环境配置

配置运行环境,选择Run->Run Configuration,new一个环境


保留以下几个Bundle,包括javax.servlet、org.apache.commons.logging、org.eclipse.equinox.http.jetty、org.eclipse.equinox.http.servlet、org.eclipse.osgi、org.eclipse.osgi.services、org.mortbay.jetty

其它的都不选择


如果出现异常,比如


说明端口被占用,在Run Configuration中设置参数


重新运行,如果没有出现异常,则表示运行成功。

在osgi窗口输入ss,会看到如下结果


打开浏览器输入http://localhost:8080,得到结果如下:


OSGI开发web应用

在Eclipse中OSGi程序的开发是以插件工程的方式进行开发的。首先新建插件工程HelloWebOSGI


完成后选择下一步


在模板中选择Hello OSGI Bundle


选择下一步


“Basic OSGi Bundle”对话框,是模板需要输入的Bundle启动和停止时列印的消息内容,在此保留默认,点“Finish”。

在左侧的包浏览面板中可以看到OSGi工程的结构,“Plug-in Dependencies”下是OSGi插件运行需要的组件,src目录下是自动生成的源代码,simplewebosgi.Activator是 Bundle生成周期管理类,可以监听组件的启动和停止动作。与普通Java工程所不同的是向导会生成“META-INF”目录以及其下的文件 MANIFEST.MF文件,此文件会随插件的发布一起被打到jar包中,定义了Bundle的标识、版本、名称、运行环境等内容。右边是可视化的配置管 理器,在这里可以定义插件,配置插件运行所依赖的组件及需要导入的包,运行时环境,编译构建配置等。

然后在src下新建目录page,在page目录下建立hello.html,加入内容




<!DOCTYPE html PUBLIC          "-//W3C//DTD HTML 4.01 Transitional//EN"           "http://www.w3.org/TR/html4/loose.dtd"         >         
<html>
<head>
<meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" >
<title>a test page</title>
</head>
<body>Hello, This is a test page!</body>
</html>



 在工程中引入javax.servlet、javax.servlet.http、org.osgi.service.http这几个包,如下图所示


现在虽然HTML页面文件有了,包也配置好了,但是还不能通过HTTP访问相应的页面,如果现在测试运行访问​​http://localhost:8080​​服务,浏览器会提示找不到页面,我们需要将页面注册到OSGi Http服务中

修改生成的Activator类,注册加入HttpService服务,程序如下:



package           hellowebosgi;         

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;

public class Activator implements BundleActivator {

private ServiceReference serviceReference;
private HttpService httpService;
private static BundleContext bc;

/*
* (non-Javadoc)
*
* @see
* org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext
* )
*/
public void start(BundleContext context) throws Exception {
System.out.println("Hello World!!");
bc = context;
registerResource();
}

private void registerResource() {
try {
serviceReference = bc.getServiceReference(HttpService.class
.getName());
if (serviceReference != null) {
httpService = (HttpService) bc.getService(serviceReference);
httpService.registerResources("/demo", "page", null);
}
} catch (Exception e) {
e.printStackTrace();
}
}

/*
* (non-Javadoc)
*
* @see
* org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
System.out.println( "Goodbye World!!" );
unregisterResource();
}

private void unregisterResource() {
try {
httpService.unregister( "/demo" );
} catch (Exception e) {
e.printStackTrace();
}
}

}


 运行并加入HelloWebOSGI工程


启动后显示Hello World!,这是在工程启动的时候输出的内容,然后输入ss,可以看到所有的Bundle都已经被加载进来


打开浏览器,在浏览器中输入​​http://localhost:8080/demo/hello.html​​

可以得到如下页面,表示运行成功。


 

标签:web,http,Bundle,framework,应用,org,OSGI,osgi
From: https://blog.51cto.com/u_4172728/5842270

相关文章

  • 关于KMP的应用几例
    信息竞赛中,KMP大概是字符串方面最经典的算法了。参考了部分代码,KMP的写法大概有两种在原有字符串上进行KMP#include<bits/stdc++.h>usingnamespacestd;constint......
  • webpack与grunt、gulp的不同
    首先,它们的共同点三者都是前端构建工具,grunt和gulp早期比较流行,现在webpack是主流;区别:grunt和gulp基于任务和流;webpack基于入口文件,webpack会自动解析入口......
  • webpack中 ,有哪些常见的Loader?他们是解决什么问题的?
    1.css-loader翻译css,可以把sass/less代码翻译成css代码;2.imgage-loader加载并压缩图片文件3.source-map-loader加载额外的map文件,方便断点调试,但体积比较大......
  • 一个简单实用的Android调试应用技巧
    在应用开发中,我们常常会进行日志打印或者debug调试,以此来分析运行时的一些信息,便于发现bug和问题。AndroidStudio的Debug功能很好用,但是有时候有些情况下,就显得不是那么快......
  • 神操作 之 远程调试 WebView 定位加载缓慢的坑。。。
    甜的时候,甜到让人不敢相信。苦的时候,苦到让你日夜无眠。前言事情的缘由,因为老韩某天贱嗖嗖的说,来,你搜下那个课程,现在免费,原价好几百,请你看。ummm,原谅我的年少无知太单纯,......
  • 关于 Android 应用多进程的整理
    在计算机操作系统中,进程是进行资源分配和调度的基本单位。这对于基于Linux内核的Android系统也不例外。在Android的设计中,一个应用默认有一个(主)进程。但是我们通过配置可......
  • webpack的构建流程是什么?从读取配置到输出文件这个过程尽量说全
    webpack的运行流程是一个串行的流程,从启动到结束会依次执行以下步骤;1.初始化参数:在配置文件,读取并合并参数,得到最终的参数;2.开始编译:拿着上一步的参数初始......
  • JavaWeb-05-Maven
    5.Maven为什么要学习这个技术?在javaweb开发中,需要使用大量的jar包,需要我们手动去导入;如何能够让一个东西自动帮我导入和配置这个jar包。因此,Maven诞生。5.1Maven架......
  • JavaWeb-02-web服务器
    2.web服务器2.1技术讲解ASP:微软:国内最早流行的就是ASP;在html中嵌入了VB的脚本ASP+COM;在ASP开发中,基本一个页面都有几千行的业务代码,页面及其混乱维护成本高C#I......
  • JavaWeb-04-Http
    4.http4.1http是什么超文本传输协议(HyperTextTransferProtocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以......