Tomcat: Изменить Виртуальные хосты программно?

Мы используем их, чтобы сделать новаторский SQL.

я также скажу, что это кропотливо для отладки, и для бедного программиста очень легко завинтить его.

10
задан Asaph 13 November 2009 в 13:21
поделиться

3 ответа

Tomcat предоставляет API-интерфейсы для создания нового виртуального хоста. Чтобы получить доступ к необходимому для этого объекту-оболочке, вам необходимо реализовать ContainerServlet. Вы можете создать виртуальный хост следующим образом:

    Context context = (Context) wrapper.getParent();
    Host currentHost = (Host) context.getParent();
    Engine engine = (Engine) currentHost.getParent();

    StandardHost host = new StandardHost();
    host.setAppBase(appBase);
    host.setName(domainName);

    engine.addChild(host);

Вам необходимо убедиться, что каталог appBase существует, и вы должны найти способы сохранить новый хост в server.xml, иначе вы потеряете хост при перезапуске.

Однако этот подход работает редко. Если ваши пользователи запускают собственные приложения, вам действительно нужно запускать отдельные экземпляры Tomcat, чтобы вы могли лучше изолировать приложения. например, для одного приложения не хватает памяти, это не уничтожает все остальные приложения.

Если вы предоставляете приложение, вы можете использовать только один хост (defaultHost). Вы можете получить доменное имя из заголовка Host и делать любые специфичные для домена вещи в своем коде.

6
ответ дан 3 December 2019 в 23:50
поделиться

Вы не должны изменять серверную среду программно, и нет надежных и стандартных способов сделать это. Лучше всего делать и хранить все это на стороне веб-приложения. Для начала отлично подойдет фильтр . Сохраните имена где-нибудь в таблице базы данных или файле свойств, который вы кэшируете в области приложения. Проверьте HttpServletRequest # getRequestURI () (или getServerName () , если это субдомен, а не pathinfo) и выполните задачу пересылки соответственно.

Надеюсь, это поможет.

3
ответ дан 3 December 2019 в 23:50
поделиться

Я бы посоветовал вам сделать ваше приложение виртуальным хостом по умолчанию в server.xml, чтобы ваш единственный виртуальный хост мог отвечать на запросы, адресованные любому имени хоста. Tomcat поставляется с приложением localhost, установленным в качестве виртуального хоста по умолчанию. Итак, вы можете увидеть, как это сделать, просто проверив файл server.xml в стандартной установке Tomcat. Вы можете программно определить имя хоста, на который пользователь отправил запрос, используя метод ServletRequest.getServerName () .

Tomcat используется для поставки с веб-приложением под названием «host-manager». Примечание: это отличается от веб-приложения «менеджер», которое все еще поставляется с Tomcat. Диспетчер хостов позволял изменять конфигурацию или добавлять новые виртуальные хосты на лету без перезапуска сервера. Вы можете взаимодействовать с хост-менеджером через HTTP (при желании программно). Однако у него был досадный недостаток: он не фиксировал свои изменения в server.xml, поэтому все они были потеряны при перезапуске веб-сервера. По какой-то причине, начиная с версии 6, Tomcat больше не поставляется с приложением host-manager. Так что, похоже, он больше не поддерживается.

1
ответ дан 3 December 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: