Веб-приложение OSGi не работает

Я пытаюсь выяснить, как реализовать пакет веб-приложений. Для этого я создал небольшой образец, следуя инструкциям в этом руководстве. War-файл может быть развернут и запущен, но я не могу вызвать любой URL.

Структура файла войны;

+ META-INF
MANIFEST.MF
+ WEB-INF
классы /
fancyfoods / веб / SayHello.class
web.xml
index.html


Я пытался позвонить
локальный:8080/
локальный:8080/fancyfoods.web/index.html
локальный:8080/fancyfoods.web/SayHello
но я всегда получаю "HTTP ERROR 404"



Я понятия не имею, что не так. Нужно ли больше пакетов для запуска веб-приложения?

С наилучшими пожеланиями





РЕЗАТЬ

И снова здравствуйте,

спасибо за ваши ответы и извините за путаницу с моим неуместным ответом (я новичок в переполнении стека). Я начал новый WAB-пример с нуля, и он все еще не работает. Чтобы проверить, работают ли вообще службы http, я сначала реализовал другой пакет (не WAB), содержащий сервлет и компонент OSGi, который регистрирует сервлет и статические ресурсы. И это работает! Я могу вызвать HTML и сервлет.

Теперь вернемся к моей проблеме с моим WAB. Так как пример не WAB работает, я предполагаю, что файл войны не в порядке. Я потратил больше времени, чтобы предоставить вам необходимую информацию (я надеюсь, что так).

Структура моего военного файла такова:

¦---index.html
¦
+---META-INF
¦-------MANIFEST.MF
¦
+---WEB-INF
    ¦   web.xml
    ¦
    +---classes
        +---org
            +---osgi
                +---helloworld
                    +---wab
                            HelloWorldWab.class
                            HelloWorldWabActivator.class
                            HelloWorldWabComponent.class
                            HelloWorldWabServlet.class



MANIFEST.MF:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_09-b05 (Oracle Corporation)
Bundle-ManifestVersion: 2
Bundle-Name: org.osgi.helloworld.wab
Bundle-SymbolicName: org.osgi.helloworld.wab
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-Activator: org.osgi.helloworld.wab.HelloWorldWabActivator
Bundle-ClassPath: WEB-INF/classes
Import-Package: javax.servlet, javax.servlet.http, org.osgi.framework,
  org.osgi.service.component, org.osgi.service.http, org.osgi.util.tra
 cker
Export-Package: org.osgi.helloworld.wab
Web-ContextPath: /helloworld
Webapp-Context: /helloworld



Когда я запускаю и останавливаю пакет, методы HelloWorldWabActivator вызываются в соответствии с требованиями.

Web.xml:

<web-app>
    <!-- welcome file mapping -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>HelloWorldWabServlet</servlet-name>
        <servlet-class>org.osgi.helloworld.wab.HelloWorldWabServletXXX</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldWabServlet</servlet-name>
        <url-pattern>/HelloWorldWabServlet</url-pattern>
    </servlet-mapping>
</web-app>



Сервер OSGi:

START LEVEL 1
   ID|State      |Level|Name
    0|Active     |    0|System Bundle (4.2.1)
    1|Active     |    1|Apache Commons FileUpload (1.2.2.v20111214-1400)
    2|Active     |    1|Apache Commons IO (1.4.0.v20081110-1000)
    3|Active     |    1|Apache Felix Bundle Repository (1.6.6)
    4|Active     |    1|Apache Felix Configuration Admin Service (1.6.0)
    5|Active     |    1|Apache Felix EventAdmin (1.3.2)
    6|Active     |    1|Apache Felix File Install (3.2.6)
    7|Active     |    1|Apache Felix Gogo Command (0.12.0)
    8|Active     |    1|Apache Felix Gogo Runtime (0.10.0)
    9|Active     |    1|Apache Felix Gogo Shell (0.10.0)
   10|Active     |    1|Apache Felix Http Api (2.2.0)
   11|Active     |    1|Apache Felix Http Base (2.2.0)
   12|Active     |    1|Apache Felix Http Bridge (2.2.0)
   13|Active     |    1|Apache Felix Http Bundle (2.2.0)
   14|Active     |    1|Apache Felix Http Jetty (2.2.0)
   15|Active     |    1|Apache Felix Http Proxy (2.2.0)
   16|Active     |    1|Apache Felix Http Whiteboard (2.2.0)
   17|Active     |    1|Apache Felix Log Service (1.0.1)
   18|Active     |    1|Apache Felix Preferences Service (1.0.4)
   19|Active     |    1|Apache Felix Declarative Services (1.6.2)
   20|Active     |    1|Apache Felix Web Management Console (4.0.0)
   21|Active     |    1|JSON Implementation for Java (1.0.0.v201011060100)
   22|Active     |    1|org.osgi.helloworld.wab (1.0.0.qualifier)
   23|Active     |    1|org.osgi.helloworld.servlet (1.0.0.qualifier)

Спасибо за поддержку

3 ответа

Вы также указали Web-ContextPath в вашем файле MANIFEST?

http://www.javabeat.net/2011/11/writing-an-osgi-web-application/

В идеале вам также следует указать файл web.xml в папке WEB-INF.

Существует несколько примеров того, как запустить ваше веб-приложение на OSGi-Web-контейнере, доступном в веб-проекте pax, это может помочь вам решить вашу проблему и быстро приступить к OSGi-WAR. Примеры Pax-Web Да, и убедитесь, что у вас установлен WebApp-Context.

Мне пришлось добавить пакет pax-web-extender-war (и, возможно, pax-url) и зависимости, чтобы заставить wabs в стиле войны работать с web.xml. Чтобы выполнить это в bndTools felix runtime в eclipse, я извлек все jar / bundles из современной системной директории Apache ServiceMix; импортировал их все в мой локальный репозиторий bndTools; и добавил все пакеты pax и jetty в мою конфигурацию bndTools Run. (Возможно, вам придется отследить несколько дополнительных зависимостей).

Другие вопросы по тегам