首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tomcat osgi实现中的简单Web应用程序包(WAB)

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

Stack Overflow用户
提问于 2013-04-18 04:00:44
回答 1查看 6.1K关注 0票数 0

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

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

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

代码语言:javascript
复制
sample.http1

   helloworld.html

   |META-INF 
       MANIFEST.MF

   |WEB-INF
      web.xml
      |classes
           |sample
                 |http
                      Activator.class
                      HelloWorldServlet.class

下面是MANIFEST.MF文件

代码语言:javascript
复制
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类的代码

代码语言:javascript
复制
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的内容

代码语言:javascript
复制
<?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/上的另一个博客

EN

回答 1

Stack Overflow用户

发布于 2013-04-18 16:35:52

您的嵌入式OSGi容器设置是否支持WAB?运行的是什么类型的osgi框架?只有HttpService可用吗?只要你不支持WAB(例如,Felix HTTP-Service不支持它),你就是徒劳的。如果可以更改HTTP-Service,您可以考虑使用它的Pax-Web实现,它支持std。WhiteBoard服务,它的HTTP扩展器,当然还有对WAB的完全支持。最新的版本甚至支持Servlets3.0。但是,如果您绑定到一个现有的基础设施,而您不允许对其进行更改,那么您无法执行任何操作来部署WAB。在OSGi容器中部署WAB有点“奇怪”,而WAR容器本身运行在WAR容器中:-)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16069174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档