我无法使用 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 规范文档和另一个博客