基于Web的Web应用程序在Apache Felix中无法访问(404)
更新:已解决。 我不得不使用一个实用程序包来自动加载OSGI中的Vaadin应用程序。 请参阅http://dev.vaadin.com/wiki/Arvue/OSGi我使用的捆绑包:org.vaadin.osgi,org.vaadin.osgi.staticres
===
我创建了一个样例Vaadin项目,使用Maven + BND将其构建为OSGI包。
用我的“webui-1.0.jar”软件包以及相关的“vaadin-6.6.6.jar”启动了Apache Felix。 我可以访问localhost:8080,但localhost:8080 / webui显示“Problem access / webui。Reason:NOT_FOUND”。
“webui-1.0.jar”包含:
com -- java classes
META-INF/MANIFEST.MF
VAADIN -- empty now, but will contain Vaadin widgetsets and other resources
WEB-INF/web.xml
我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>webui</display-name>
<context-param>
<description>
Vaadin production mode</description>
<param-name>productionMode</param-name>
<param-value>false</param-value>
</context-param>
<servlet>
<servlet-name>Vaadin1 Application</servlet-name>
<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
<init-param>
<description>
Vaadin application class to start</description>
<param-name>application</param-name>
<param-value>com.mywebtest.MyVaadinApplication</param-value>
</init-param>
<init-param>
<description>
Application widgetset</description>
<param-name>widgetset</param-name>
<param-value>com.mywebtest.widgetset.Vaadin1Widgetset</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Vaadin1 Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
我的Maven + BND生成的MANIFEST.MF文件:
Manifest-Version: 1
Bnd-LastModified: 1315684875698
Build-Jdk: 1.6.0_26
Built-By: ask
Bundle-ManifestVersion: 2
Bundle-Name: webui
Bundle-SymbolicName: webui
Bundle-Version: 1.0.0
Class-Path:
Created-By: Apache Maven Bundle Plugin
Export-Package: com.mywebtest;uses:="com.vaadin,com.vaadin.ui";version="
1.0.0"
Import-Package: com.vaadin,com.vaadin.ui
Tool: Bnd-1.43.0
运行包:
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (3.2.2)
1|Active | 1|Apache Felix Bundle Repository (1.6.6)
2|Active | 1|Apache Felix Configuration Admin Service (1.2.8)
3|Active | 1|Apache Felix Dependency Manager (3.0.0)
4|Active | 1|Apache Felix Gogo Command (0.8.0)
5|Active | 1|Apache Felix Gogo Runtime (0.8.0)
6|Active | 1|Apache Felix Gogo Shell (0.8.0)
7|Active | 1|Apache Felix Http Api (2.2.0)
8|Active | 1|Apache Felix Http Jetty (2.2.0)
9|Active | 1|Apache Felix Metatype Service (1.0.4)
10|Active | 1|Apache Felix Declarative Services (1.6.0)
11|Active | 1|Apache Felix Web Management Console (3.1.8)
12|Active | 1|Vaadin (6.6.6)
13|Active | 1|webui (1.0.0)
您的运行时中没有任何软件包会为您自动注册Web端点,这仅仅是因为您在名为web.xml
的软件包中编写了一个文件。
在OSGi中发布Web应用程序有两个主要选项。 首先是获取HttpService
服务的实例,您应该找到该服务由“Felix Http Jetty”包发布。
其次,更接近“传统”Java Web应用程序开发,是建立一个“Web应用程序包”或WAB。 这基本上就像你的WEB-INF/web.xml
。 你需要做两件额外的事情才能使它工作:
Web-ContextPath: /webui
上一篇: based web app is not accessible (404) in Apache Felix
下一篇: how to exclude GWT dependency code from OSGI bundle generated by MAven+BND?