Tomcat: два контекстных пути для одного веб-приложения - PullRequest
14 голосов
/ 11 ноября 2009

Проблема в следующем: У меня есть веб-приложение, и это веб-приложение развернуто в каталоге $TOMCAT_HOME/webapps/XXX. Я могу достичь этого по адресу http://localhost:8080/XXX НО, я бы тоже хотел получить доступ к веб-приложению по адресу http://localhost:8080/YYY. Я добавил следующее в server.xml:

<Server>
    <Service>
        <Engine>
            <Host>
                .......
                <Context path="/YYY" docBase="XXX"></Context>
            </Host>
        </Engine>
    </Service>
</Server>

Это помогло, но Tomcat запустил два веб-контекста, и это вызвало некоторые другие проблемы. Можно ли создать «несколько» адресов для одного веб-приложения?

Ответы [ 2 ]

4 голосов
/ 23 августа 2012

URL веб-приложения собирается следующим образом:

ПРОТОКОЛ: // DOMAIN: PORT / КОНТЕКСТ / ИмяСтраницы

Решения для использования одного и того же приложения на двух разных адресах следующие:

  1. Если вы хотите различаться только по протоколу (скажем, между http и https), просто укажите 2 соединителя в файле server.xml.

  2. если вы хотите различаться по имени DOMAIN, то это решается на уровне DNS.

  3. Если вы хотите различаться по имени контекста (имени веб-приложения), вы должны поставить перед apache (mod_proxy или mod_ajp), а затем создать правило перезаписи (mod_rewrite). скажем, переписать все с /a/* и /b/* до /c/*

  4. Если вы хотите различаться по имени страницы, вам следует использовать сопоставления сервлетов.

Поместить apache перед tomcat через mod_proxy очень просто, в сети есть несколько ресурсов. Очень плохо было бы дублировать приложения (загружать все дважды).

Что касается вашего вопроса, я бы посоветовал повторить дублирование в server.xml.

<Context docBase="myapp" path="/address1" reloadable="true" />
<Context docBase="myapp" path="/address2" reloadable="true" />

Это убийца памяти, а также механизмов сессии, конкуренции и т. Д.

0 голосов
/ 11 ноября 2009

Попробуйте использовать атрибут crossContext:

<Context path="/YYY" docBase="XXX" crossContext="true"></Context>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...