Как удалить корневой элемент URL моего веб-приложения Jetty? - PullRequest
4 голосов
/ 13 января 2012

Я использую веб-приложение на Java (назовем его mywebapp).

В настоящее время я захожу на свою страницу в этом веб-приложении, указывая локально на:

http://localhost:9000/mywebapp/mystuff

Однако мне нужно получить к нему доступ с помощью:

http://localhost:9000/mystuff

Как я могу это сделать? Я пытался возиться с некоторыми конфами, но безрезультатно ...

Это мой текущий root.xml:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="contextPath">/root</Set>
    <Set name="war">
        <SystemProperty name="app.webapps.path"/>/mywebapp.war
    </Set>
</Configure>

Также пробовал:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">
        <SystemProperty name="app.webapps.path"/>/mywebapp.war
    </Set>
</Configure>

Я использую Maven - не уверен, что это может иметь значение.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 14 января 2012

Чтобы установить свой контекстный путь на "/", вам нужно использовать развертывание контекста. Примечание: Вы ДОЛЖНЫ указать строку пути к контексту для целей отображения спецификации пути. Пустая строка пути к контексту "" действительна только в качестве результата сопоставления запросов к корню контекста. См. Раздел 12.2 спецификации сервлета)

В Jetty 7.x назначение пути к контексту обрабатывается поставщиками приложений, назначенными для DeploymentManager.

По умолчанию в Jetty Distribution, оба , WebAppProvider и ContextProvider включены. Это важно знать позже, так как это повлияет на ваши решения о том, куда поместить файл mywebapp.war.

Посмотрите файл ${jetty.home}/start.ini, и вы увидите, что он содержит обе ссылки на etc/jetty-webapps.xml и etc/jetty-contexts.xml

Роль WebAppProvider заключается в том, чтобы обращать внимание на каталог ${jetty.home}/webapps/ для любых развертываемых приложений (например, * .war) и развертывать их в контексте с тем же именем, что и имя файла. Другими словами, ${jetty.home}/webapps/MyApp-2.4.war развернут в контексте "/MyApp-2.4". Существует также специальное зарезервированное слово «root.war», которое будет развернуто в контексте "/". Хотя это самый простой механизм развертывания, он жертвует контролем над особенностями развертывания.

Роль ContextProvider - обращать внимание на каталог ${jetty.home}/contexts/ для любых развертываемых контекстов, отформатированных в jetty-xml. Этот механизм развертывания дает вам максимальный контроль над развертыванием, xml-файл может контролировать все, что в конечном итоге разрешено в org.eclipse.jetty.server.handler.ContextHandler базовый класс, из которых WebAppContext (войны / сервлеты / и т. Д.) Являются частью. Наиболее распространенное использование - указать xml-файл на основе WebAppContext и управлять такими вещами, как, например, какие файлы и каталоги составляют веб-приложение, какой временный каталог использовать и даже какой контекстный путь использовать.

То, что вы хотите сделать, это:

  1. Убедитесь, что развертывания на основе ContextProvider включены в файле start.ini (убедитесь, что присутствует etc/jetty-context.xml)
  2. Создайте ${jetty.home}/contexts/mywebapp.xml, который объявляет опцию <Set name="contextPath">/</Set>.
  3. Если у вас есть etc/jetty-webapps.xml в вашем файле start.ini, не не помещайте ваш mywebapp.war в ${jetty.home}/webapps, так как это приведет к тому, что WebAppProvider также развернет то же самое веб-приложение, и запутает ваше развертывание. .

Наконец, вы можете увидеть, как это делается в самом дистрибутиве пристани , просто откройте ${jetty.home}/contexts/test.xml и осмотрите его. Вы увидите, что он загружает ${jetty.home}/webapps/test.war через использование ContextProvider ${jetty.home}/contexts/test.xml в контекстный путь "/".

Еще одна заметка, посмотрите журналы.

2012-01-13 13: 56: 28.779: ИНФОРМАЦИЯ: oejsh.ContextHandler: запущен oejwWebAppContext {/, файл: /tmp/jetty-0.0.0.0-8080-test.war -_- any- / webapp / } / дома / Йоаким / код / ​​пристань / дистрибутивы / причал-распределение-7.6.0.RC3 / WebApps / test.war

Это говорит мне, что WebAppContext был

  • Начато с {/, (корневой контекстный путь)
  • Использование каталога temp / work file:/tmp/jetty-0.0.0.0-8080-test.war-_-any-/webapp/
  • Использование веб-приложения, указанного в /home/joakim/code/jetty/distros/jetty-distribution-7.6.0.RC3/webapps/test.war.

Обновление: уточнение утверждения о пустом пути к контексту.

2 голосов
/ 13 января 2012

См. http://wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications:

Если веб-приложение называется root.war или каталог называется root /, то Jetty развертывает его в / context.

PS: я никогда не использовал Jetty, и мне потребовалось 3 секунды, чтобы найти в Google.

...