0

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

我能够使用 HttpService 使用纯 osgi 包以编程方式注册 jsp/servlets/html,并且可以访问此包。我尝试的下一件事是创建一个单独的 WAB,其中包含一个 html 和一个 servlet 资源,但在访问包时遇到了一些问题。我尝试了 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 page resource not found 错误。

http://localhost/bridge/samplehttp/helloworld.html --对于静态html

http://localhost/samplehttp/helloworld.html

http://localhost/bridge/samplehttp/helloworld --对于 HelloWorldServlet

http://localhost/samplehttp/helloworld

Tomcat 托管在端口 80 上。我可以访问我的其他 osgi 包,这些包是使用 HttpService 以编程方式注册的。下面的 osgi 包完美地工作。

例如 http://localhost/bridge/jsp-examples/helloworld.jsp

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

4

1 回答 1

0

您的嵌入式 OSGi 容器设置是否支持 WAB?什么样的 osgi 框架正在运行?是否只有 HttpService 可用。只要您不支持 WAB(例如 Felix HTTP-Service 不支持此功能),您就是徒劳的。如果可以更改 HTTP 服务,您可以考虑使用它的 Pax-Web 实现,它支持标准。HTTP-Service,它的白板扩展器,当然也完全支持 WAB。最新的甚至支持 Servlets 3.0。但是,如果您绑定到现有的基础架构,并且不允许更改,那么您将无法部署 WAB。在 OSGi 容器中部署 WAB 有点“奇怪”,该容器本身在 WAR 容器中运行 :-)

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

于 2013-04-18T08:35:52.087 回答