Необходимо понимать дескриптор и структуру WAR — проект Flex в рамках WAR

Я пытаюсь понять, почему я не могу запустить SWF из URL-адреса после запуска mvm jetty:run в моем проекте.

Проект успешно построен и создал Falcon-WAR-0.0.1-SNAPSHOT.war в целевом каталоге maven. В этом файле находятся следующие файлы, включая файл .swf, скомпилированный из проекта Flex.

введите здесь описание изображения

Мой web.xml очень прост и содержит следующий код:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">

    <display-name>Falcon Flights</display-name>

    <welcome-file-list>
        <welcome-file>Falcon-Flights.swf</welcome-file>
    </welcome-file-list>

</web-app>

Корень контекста моего приложения совпадает с идентификатором артефакта WAR, поэтому это FALCON-WAR.

Когда я запускаю mvn jetty:run, я получаю в консоли следующий вывод: введите здесь описание изображения

Однако, когда я пытаюсь перейти к http://localhost:8080/FALCON-WAR в своем браузере, Я получаю следующее, когда я ожидаю запустить файл .swf из определения web.xml.

введите здесь описание изображения

Может ли кто-нибудь помочь мне понять, что я делаю неправильно? Это может быть больше связано с пониманием того, как веб-контейнеры интерпретируют структуры .war, но это мой первый удар по разработке веб-приложений, и его можно было бы подтолкнуть!

Спасибо заранее.


person totalcruise    schedule 14.01.2012    source источник


Ответы (3)


Я мало что знаю о Джетти; но то, что вы видите в своем «выводе», выглядит как список каталогов веб-сервера. Есть ли что-нибудь еще в каталоге? Вы уверены, что веб-корень указывает на каталог, который вы отображаете в своем первом снимке? [Если да, то где находится каталог meta-inf и файл falcon-flights? Что, если вы измените свой URL-адрес на этот:

http://localhost:8080/FALCON-WAR/Falcon-Flights.swf

Это дает вам ошибку 404 или загружается правильно?

person JeffryHouser    schedule 14.01.2012
comment
Привет - да, это дает мне ошибку 404. Но если вы посмотрите на снимок консоли выше, он объявляет контекстный путь как /FALCON-WAR. Поэтому я предполагаю, что localhost:8080/FALCON-WAR приведет меня к каталогу приложения. - person totalcruise; 15.01.2012
comment
В этом каталоге больше ничего нет, только папка WEB-INF. Когда я нажимаю на ссылку для этого - она ​​тоже пуста. - person totalcruise; 15.01.2012
comment
@totalcruise похоже, что пути веб-сервера настроены неправильно; и указывают на неправильные вещи. Я просто не знаю, как сказать тебе исправить это. - person JeffryHouser; 15.01.2012

В конце концов я использовал цель mvn jetty:run=exploded. Эта цель указывает на каталог сборки файла WAR (первый снимок на изображении из текста вопроса), и тогда контекстный путь был действительным.

Все еще не уверен, почему причал: запуск не работал правильно, но я в порядке.

Спасибо Flextras за помощь...

person totalcruise    schedule 15.01.2012
comment
+1 Обязательно отметьте это как решение вашего вопроса. Это поможет будущим людям, которые столкнутся с этим вопросом. - person JeffryHouser; 17.01.2012

Это связано с тем, что jetty:run работает из исходного кода вашего проекта Maven. Хотя вы показали список каталогов цели, неясно, как туда попал ваш SWF — я предполагаю, что это зависимость от вашего модуля WAR, а не в src/main/webapp или подобном.

jetty:run-exploded сначала создает целевой каталог, а затем запускает приложение из него. Поэтому это будет работать лучше.

Другой вариант — jetty:run-war, который создает WAR и запускает приложение из него. Однако это будет медленнее, чем jetty:run-exploded, для которого требуется на один шаг сборки меньше.

См. http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin для более подробной информации.

person Kkkev    schedule 17.01.2012