tomcat osgi实现中的简单Web应用程序包(WAB)
我无法使用servletbridge osgi实现访问在tomcat中部署的简单WAB。
我能够使用纯osgi包使用HttpService以编程方式注册jsp / servlets / html,并且可以访问此捆绑包。 接下来我尝试的是创建一个包含一个html和一个servlet资源的单独WAB,但遇到访问该包的一些问题。 我尝试了震动和未捆绑的捆绑。 我现在假设的是,对于WAB,我不需要以编程方式或以声明方式注册我的资源?
下面是我创建的WAB包。 它不包含任何Http Service Tracker,只是一个在控制台上显示激活和停用消息的激活器。
sample.http1
helloworld.html
|META-INF
MANIFEST.MF
|WEB-INF
web.xml
|classes
|sample
|http
Activator.class
HelloWorldServlet.class
下面是MANIFEST.MF文件
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: sample.http1
Bundle-SymbolicName: sample.http1
Bundle-Version: 1.0.0
Bundle-Activator: sample.http.Activator
Import-Package: javax.servlet,javax.servlet.http,org.osgi.framework, org.osgi.service.http, org.osgi.util.tracker
Bundle-ClassPath: WEB-INF/classes
Web-ContextPath: /samplehttp
以下是Activator类的代码
package sample.http;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println("Starting Hello World");
}
public void stop(BundleContext context) throws Exception {
System.out.println("Stopping Hello World");
}
}
以下是web.xml的内容
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>sample.http.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>
然后我激活了这个包。 并尝试访问下面的WAB资源,但我得到一个404页面资源未找到错误。
http://localhost/bridge/samplehttp/helloworld.html
- 用于静态html
http://localhost/samplehttp/helloworld.html
http://localhost/bridge/samplehttp/helloworld
- 用于HelloWorldServlet
http://localhost/samplehttp/helloworld
Tomcat托管在端口80上,并且我可以访问我使用HttpService以编程方式注册的其他osgi包。 下面的osgi包完美地工作。
例如http://localhost/bridge/jsp-examples/helloworld.jsp
请指教。 我已经参考了osgi规范文档和另一篇博客,网址是:http://www.javabeat.net/2011/11/writing-an-osgi-web-application/
您的嵌入式OSGi容器设置是否支持WAB? 什么样的osgi框架正在运行? 是否只有可用的HttpService? 只要你没有支持WAB(例如Felix HTTP服务不支持这个),你就是徒劳的。 如果可以更改HTTP服务,您可以考虑使用它的Pax-Web实现,它支持std。 HTTP-Service,一个WhiteBoard Extender,当然还包括对WAB的全面支持。 最新的一个甚至支持Servlets 3.0。 尽管如果你受限于现有的基础设施,你不能改变,但你无法做任何事情来部署WAB。 在一个本身运行在WAR容器内的OSGi容器中部署WAB有点“奇怪”:-)
所以基本上如果你想使用这个场景,你可能需要做如下的事情:在Tomcat中运行一个WAR应用程序,让你的OSGi服务在另一个WAR的OSGi-Container内部运行。 远程HTTP调用OSGi-War中的服务。
链接地址: http://www.djcxy.com/p/74721.html上一篇: Simple Web Application Bundle(WAB) in tomcat osgi implementation