«1. Введение

В этом руководстве мы подробно рассмотрим приложение Tomcat Manager.

В двух словах, приложение Tomcat Manager — это веб-приложение, упакованное вместе с сервером Tomcat и предоставляющее нам базовые функции, необходимые для управления нашими развернутыми веб-приложениями.

Как мы увидим, приложение имеет множество функций и сервисов. Помимо возможности управлять развернутыми приложениями, мы также можем видеть состояние и конфигурацию сервера и его приложений.

2. Установка Tomcat

Прежде чем мы углубимся в приложение Tomcat Manager, нам сначала нужно установить сервер Tomcat.

К счастью, установить Tomcat несложно. Пожалуйста, обратитесь к нашему руководству Introduction to Apache Tomcat, чтобы получить помощь по установке Tomcat. В этом руководстве мы будем использовать последнюю версию Tomcat 9.

3. Доступ к приложению Tomcat Manager

Теперь давайте посмотрим, как использовать приложение Tomcat Manager. Здесь у нас есть два варианта — мы можем выбрать использование веб-приложения (HTML) или текстовой веб-службы.

Текстовый сервис идеально подходит для написания сценариев, тогда как HTML-приложение предназначено для людей.

Веб-приложение доступно по адресу:

    http[s]://\u003cсервер\u003e:\u003cпорт\u003e/manager/html/

В то время как соответствующий текстовый сервис доступен по адресу:

    http [s]://\u003cсервер\u003e:\u003cпорт\u003e/manager/text/

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

Давайте добавим таких пользователей, отредактировав файл conf/tomcat-users:

<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="tomcatgui" password="s3cret" roles="manager-gui"/>
  <user username="tomcattext" password="baeldung" roles="manager-script"/>
</tomcat-users>

Как видим, мы добавили двух новых пользователей:

    tomcatgui — имеет роль manager-gui и может использовать веб-приложение tomcattext — имеет роль сценария менеджера и может использовать текстовую веб-службу

В следующем разделе мы увидим, как мы можем использовать этих двух пользователей для демонстрации возможностей приложения Tomcat Manager.

4. Список развернутых приложений

В этом разделе мы узнаем, как просмотреть список развернутых приложений.

4.1. Использование Интернета

Давайте откроем http://localhost:8080/manager/html/, чтобы просмотреть веб-страницу приложения Tomcat Manager. Для этого нам нужно аутентифицироваться как пользователь tomcatgui.

После входа в систему вверху страницы отображается список всех развернутых приложений. Для каждого приложения мы можем видеть, запущено оно или нет, контекстный путь и количество активных сеансов. Есть также несколько кнопок, которые мы можем использовать для управления приложениями:

Tomcat Manager app list applications

4.2. Использование текстовой службы

Кроме того, мы можем вывести список всех развернутых приложений с помощью текстовой веб-службы. На этот раз мы делаем запрос curl, используя пользователя tomcattext для аутентификации:

curl -u tomcattext:baeldung http://localhost:8080/manager/text/list

Как и на веб-странице, ответ показывает все развернутые приложения с их текущим состоянием и количеством активных сеансов. Например, мы видим, что приложение-менеджер запущено и имеет один активный сеанс:

OK - Listed applications for virtual host [localhost]
/:running:0:ROOT
/examples:running:0:examples
/host-manager:running:0:host-manager
/manager:running:1:manager
/docs:running:0:docs

5. Управление приложениями

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

5.1. Использование Интернета

В случае с веб-приложением для остановки и запуска приложений достаточно просто нажать кнопки на веб-странице. Результат и любые проблемы сообщаются в поле сообщения в верхней части страницы.

5.2. Использование текстовой службы

Точно так же мы можем останавливать и запускать приложения с помощью текстовой службы. Давайте остановим, а затем запустим пример приложения с помощью запроса curl:

curl -u tomcattext:baeldung http://localhost:8080/manager/text/stop?path=/examples
OK - Stopped application at context path [/examples]
curl -u tomcattext:baeldung http://localhost:8080/manager/text/start?path=/examples
OK - Started application at context path [/examples]

Параметр запроса пути указывает, каким приложением управлять, и должен соответствовать пути контекста приложения.

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

curl -u tomcattext:baeldung http://localhost:8080/manager/text/reload?path=/docs
OK - Reloaded application at context path [/docs]

Вот пример того, как мы можем перезагрузить приложение docs с помощью текстового сервиса:

«

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

6. Срок действия сеансов

Помимо управления приложениями, мы можем управлять сеансами пользователей. Приложение Tomcat Manager показывает подробную информацию о текущих пользовательских сеансах и позволяет нам вручную завершать сеансы.

6.1. Через веб-интерфейс

Мы можем просмотреть текущие сеансы пользователей, перейдя по ссылке в столбце «Сеансы» для всех перечисленных приложений.

Tomcat Manager app user sessions

В приведенном ниже примере мы видим две пользовательские сессии для приложения-менеджера. Он показывает продолжительность сеанса, как долго он был неактивен и как долго до истечения срока его действия (по умолчанию 30 минут).

Мы также можем вручную уничтожить сеансы, выбрав их и выбрав Invalidate selected session:

На главной странице есть кнопка Expire Sessions. Это также уничтожает сеансы, которые бездействовали в течение указанного периода минут.

6.2. Через текстовую веб-службу

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/sessions?path=/manager"
OK - Session information for application at context path [/manager]
Default maximum session inactive interval is [30] minutes
Inactive for [2 - <3] minutes: [1] sessions
Inactive for [13 - <14] minutes: [1] sessions

Опять же, эквиваленты текстовых служб просты.

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/expire?path=/manager&idle=10"
OK - Session information for application at context path [/manager]
Default maximum session inactive interval is [30] minutes
Inactive for [5 - <6] minutes: [1] sessions
Inactive for [15 - <16] minutes: [1] sessions
Inactive for [>10] minutes: [1] sessions were expired

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

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

7. Развертывание приложений

Теперь, когда мы увидели, как мы можем управлять нашими приложениями, давайте посмотрим, как мы может развертывать новые приложения.

Для начала загрузите пример WAR Tomcat, чтобы у нас было новое приложение для развертывания.

Tomcat Manager app war deploy

7.1. Использование Интернета

Tomcat Manager app sample application

Теперь у нас есть несколько вариантов развертывания нашего нового примера WAR с использованием веб-страницы. Самый простой способ — загрузить образец WAR-файла и развернуть его:

WAR развертывается с контекстным путем, совпадающим с именем WAR. В случае успеха образец приложения развертывается, запускается и отображается в списке приложений. Если мы перейдем по ссылке /sample в контекстном пути, мы сможем просмотреть наш работающий образец приложения:

Tomcat Manager app path to war

Чтобы мы могли снова развернуть то же приложение, давайте нажмем кнопку Undeploy. Как следует из названия, это приведет к отмене развертывания приложения. Обратите внимание, что при этом также удаляются все файлы и каталоги развернутого приложения.

Далее мы можем развернуть пример файла WAR, указав путь к файлу. Мы указываем URI пути файла к файлу WAR или распакованной директории плюс путь контекста. В нашем случае образец WAR находится в каталоге /tmp, и мы устанавливаем контекстный путь к /sample:

<Context docBase="/tmp/sample.war" reloadable="true" />

Tomcat Manager app xml deployment descriptor

В качестве альтернативы мы можем указать путь к файлу дескриптора развертывания XML. Такой подход позволяет указать дополнительные атрибуты, влияющие на развертывание и запуск приложения. В приведенном ниже примере мы развертываем образец приложения WAR и делаем его перезагружаемым.

Обратите внимание, что любой путь, указанный в дескрипторе развертывания, игнорируется. Путь контекста берется из имени файла дескриптора развертывания. Взгляните на общие атрибуты, чтобы понять почему, а также описание всех других возможных атрибутов:

7.2. Использование текстового сервиса

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/undeploy?path=/sample"
OK - Undeployed application at context path [/sample]

Теперь давайте рассмотрим развертывание приложений с помощью текстового сервиса.

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/deploy?path=/sample&war=file:/tmp/sample.war"
OK - Deployed application at context path [/sample]

Во-первых, давайте отменим развертывание нашего примера приложения:

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/deploy?config=file:/tmp/sample.xml"
OK - Deployed application at context path [/sample]

Чтобы развернуть его снова, мы указываем контекстный путь и URI местоположения образца WAR-файла:

Кроме того, мы также можем развернуть приложение, использующее дескриптор развертывания XML:

keytool -genkey -alias tomcat -keyalg RSA -keystore conf/localhost-rsa.jks

8. Просмотр конфигурации SSL

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" />
    </SSLHostConfig>
</Connector>

Нам нужно включить SSL в Tomcat, прежде чем мы сможем увидеть какую-либо конфигурацию SSL. Во-первых, давайте создадим новое хранилище ключей сертификата с самоподписанным сертификатом в каталоге conf нашего Tomcat:

Затем мы изменим файл conf/tomcat-server.xml, чтобы включить коннектор SSL в Tomcat:

Как только мы перезапустим Tomcat, мы обнаружим, что он безопасно работает на порту 8443!

8.1. Использование Интернета

Tomcat Manager app TLS buttons

    «Давайте откроем https://localhost:8443/manager/html, чтобы снова увидеть приложение Tomcat Manager. Он должен выглядеть точно так же.

Теперь мы можем просмотреть нашу конфигурацию SSL с помощью кнопок в разделе «Диагностика»:

Tomcat manager app re-load SSL

Кнопка «Шифры» показывает все шифры SSL, понятные Tomcat. Далее, кнопка «Сертификаты» показывает сведения о нашем самоподписанном сертификате. Наконец, кнопка «Доверенные сертификаты» показывает сведения о сертификате доверенного ЦС; в нашем примере он не отображает ничего интересного, поскольку мы не добавили никаких доверенных сертификатов CA

Кроме того, файлы конфигурации SSL могут быть динамически перезагружены в любое время. Мы можем повторно загрузить для каждого виртуального хоста, введя имя хоста. В противном случае перечитывается вся конфигурация:

    8.2. Использование текстового сервиса
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorCiphers"
    Точно так же мы можем получить ту же информацию с помощью текстового сервиса. Мы можем просмотреть все:
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorCerts"
    Шифры SSL, использующие ресурс sslConnectorCiphers:
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorTrustedCerts"

Сертификаты, использующие ресурс sslConnectorCerts:

curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslReload"
OK - Reloaded TLS configuration for all TLS virtual hosts

Доверенные сертификаты, использующие ресурс sslConnectorTrustedCerts:

Конфигурация SSL может быть перезагружен с помощью:

Обратите внимание на параметр -k в команде curl, так как мы используем самозаверяющий сертификат.

9. Просмотр состояния сервера

Tomcat Manager app server status

Приложение Tomcat Manager также показывает нам состояние сервера и развернутых приложений. Эти страницы особенно удобны, когда мы хотим просмотреть общую статистику использования.

Если мы перейдем по ссылке «Состояние сервера», отображаемой в правом верхнем углу, мы увидим подробную информацию о сервере. Ссылка «Полное состояние сервера» показывает дополнительные сведения о приложениях:

Нет соответствующей текстовой службы. Однако мы можем изменить ссылку «Статус сервера», чтобы просмотреть статус сервера в формате XML. К сожалению, то же самое для ссылки «Полное состояние сервера» может работать или не работать, в зависимости от используемой версии Tomcat.

10. Сохранение конфигурации

Текстовый сервис позволяет сохранить текущую конфигурацию в Tomcat conf/server.xml. Это очень полезно, если мы изменили конфигурацию и хотим сохранить ее для дальнейшего использования.

<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener" />

К счастью, это также резервирует предыдущий файл conf/server.xml, хотя любые предыдущие комментарии могут быть удалены в новом файле конфигурации conf/server.xml.

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/save"
OK - Server configuration saved

Однако, прежде чем мы сможем это сделать, нам нужно добавить новый слушатель. Отредактируйте файл conf/server.xml и добавьте следующее в конец списка существующих слушателей:

После перезапуска Tomcat мы можем сохранить нашу конфигурацию, используя:

11. Диагностика

Наконец, давайте рассмотрим дополнительные диагностические функции, предоставляемые приложением Tomcat Manager.

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/threaddump"
OK - JVM thread dump
2019-10-06 23:19:10.066
Full thread dump Java HotSpot(TM) 64-Bit Server VM (11.0.3+12-LTS mixed mode):
...

11.1. Дамп потока

Мы можем использовать текстовую службу для получения дампа потока работающего сервера Tomcat:

Это особенно полезно, когда нам нужно проанализировать или найти потоки, вызывающие проблемы с производительностью, такие как запущенные или заблокированные потоки.

11.2. Поиск утечек памяти

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

curl -u  tomcattext:baeldung "http://localhost:8080/manager/text/findleaks?statusLine=true"
OK - No memory leaks found

Нам нужно только запустить кнопку «Найти утечки» на веб-странице, чтобы обнаружить утечки.

Аналогичным образом текстовая служба может выполнять обнаружение утечки памяти:

curl -u tomcattext:baeldung "http://localhost:8080/manager/text/resources"
OK - Listed global resources of all types
UserDatabase:org.apache.catalina.users.MemoryUserDatabase

11.3. Отображение доступных ресурсов

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

12. Заключение

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