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

标签 tomcat osgi bundle wab

我在使用 servletbridge osgi 实现访问部署在 tomcat 中的简单 WAB 时遇到问题。

我能够使用纯 osgi 包使用 HttpService 以编程方式注册 jsp/servlets/html,并且可以访问该包。我尝试的下一件事是创建一个单独的 WAB,其中包含一个 html 和一个 servlet 资源,但在访问包时遇到了一些问题。我尝试了 jarred 和 unjarred 包。我现在假设的是,对于 WAB,我不需要以编程方式或声明方式注册我的资源???

下面是我创建的 WAB 包。它不包含任何 Http 服务跟踪器,只是一个在控制台上显示激活和停用消息的激活器。

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 上。我可以访问我的其他 osgi 包,这些包是使用 HttpService 以编程方式注册的。下面的 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。 尽管如果您绑定(bind)到现有的基础架构,而不允许更改,则您无法部署 WAB。 在本身运行在 WAR 容器中的 OSGi 容器中部署 WAB 有点“奇怪”:-)

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

关于tomcat - tomcat osgi 实现中的简单 Web 应用程序包 (WAB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069174/

相关文章:

java - 在 Apache Felix 中禁用缓存

java - Tomcat 和 OSGi

ios - 资源包中的 Assets 目录

bundle - 使用相对导入路径时 Aurelia bundle 失败

java - 当我通过 Eclipse 重新运行应用程序时,Tomcat 会删除我所有上传的图像

tomcat - 发布请求在我的 servlet 中不起作用,但获取请求可以

tomcat - Openshift Origin-rhc app create tomcat7 报错-Failed to execute : : 'control start'

java - Apache Tomcat在mac上安装环境变量Setup

osgi - 如何在基于功能的 eclipse rcp 应用程序中自动启动 org.eclipse.gemini.blueprint.extender?

symfony - 使用 Symfony2 中的 KnpPaginatorBundle 对多对一关系进行排序