tomcat osgi实现中的简单Web应用程序包(WAB)

问题描述 投票:0回答:1

我无法使用servletbridge osgi实现访问部署在tomcat中的简单WAB。

我能够使用纯osgi包以编程方式使用HttpService注册jsp / servlets / html,并且可以访问此包。我尝试的下一件事是创建一个包含一个html和一个servlet资源的单独WAB,但遇到访问该bundle的一些问题。我尝试了一些jarred和unjarred bundle。我现在假设的是,对于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

请指教。我在http://www.javabeat.net/2011/11/writing-an-osgi-web-application/上提到了osgi规范文档和另一个博客

tomcat osgi bundle wab
1个回答
0
投票

您的嵌入式OSGi容器设置是否支持WAB?运行什么样的osgi框架?是否只有HttpService可用。只要你没有对WAB的支持(例如Felix HTTP-Service不支持这个)你就是徒劳。如果可以更改HTTP服务,您可以考虑使用它的Pax-Web实现,它支持std。 HTTP-Service,一个WhiteBoard Extender,当然还有对WAB的全面支持。最新的甚至支持Servlets 3.0。虽然如果您绑定到现有的基础架构,而您不允许更改,则无法部署WAB。在OSGi容器中部署WAB有点“奇怪”,它本身在WAR容器内运行:-)

所以基本上如果你想使用这个场景,你可能需要做类似下面的事情:在Tomcat中运行一个WAR应用程序,让你的OSGi服务在另一个WAR内的OSGi-Container内运行。对OSGi-War中的服务进行远程HTTP调用。

© www.soinside.com 2019 - 2024. All rights reserved.