基于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 。 你需要做两件额外的事情才能使它工作:

  • 在您的MANIFEST.MF中声明Web应用程序,如下所示: Web-ContextPath: /webui
  • 安装提供WAB支持的软件包,例如PAX Web提供的软件包。
  • 链接地址: http://www.djcxy.com/p/74753.html

    上一篇: based web app is not accessible (404) in Apache Felix

    下一篇: how to exclude GWT dependency code from OSGI bundle generated by MAven+BND?