«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.
После входа в систему вверху страницы отображается список всех развернутых приложений. Для каждого приложения мы можем видеть, запущено оно или нет, контекстный путь и количество активных сеансов. Есть также несколько кнопок, которые мы можем использовать для управления приложениями:
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. Через веб-интерфейс
Мы можем просмотреть текущие сеансы пользователей, перейдя по ссылке в столбце «Сеансы» для всех перечисленных приложений.
В приведенном ниже примере мы видим две пользовательские сессии для приложения-менеджера. Он показывает продолжительность сеанса, как долго он был неактивен и как долго до истечения срока его действия (по умолчанию 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, чтобы у нас было новое приложение для развертывания.
7.1. Использование Интернета
Теперь у нас есть несколько вариантов развертывания нашего нового примера WAR с использованием веб-страницы. Самый простой способ — загрузить образец WAR-файла и развернуть его:
WAR развертывается с контекстным путем, совпадающим с именем WAR. В случае успеха образец приложения развертывается, запускается и отображается в списке приложений. Если мы перейдем по ссылке /sample в контекстном пути, мы сможем просмотреть наш работающий образец приложения:
Чтобы мы могли снова развернуть то же приложение, давайте нажмем кнопку Undeploy. Как следует из названия, это приведет к отмене развертывания приложения. Обратите внимание, что при этом также удаляются все файлы и каталоги развернутого приложения.
Далее мы можем развернуть пример файла WAR, указав путь к файлу. Мы указываем URI пути файла к файлу WAR или распакованной директории плюс путь контекста. В нашем случае образец WAR находится в каталоге /tmp, и мы устанавливаем контекстный путь к /sample:
<Context docBase="/tmp/sample.war" reloadable="true" />
В качестве альтернативы мы можем указать путь к файлу дескриптора развертывания 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. Использование Интернета
-
«Давайте откроем https://localhost:8443/manager/html, чтобы снова увидеть приложение Tomcat Manager. Он должен выглядеть точно так же.
Теперь мы можем просмотреть нашу конфигурацию 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 также показывает нам состояние сервера и развернутых приложений. Эти страницы особенно удобны, когда мы хотим просмотреть общую статистику использования.
Если мы перейдем по ссылке «Состояние сервера», отображаемой в правом верхнем углу, мы увидим подробную информацию о сервере. Ссылка «Полное состояние сервера» показывает дополнительные сведения о приложениях:
Нет соответствующей текстовой службы. Однако мы можем изменить ссылку «Статус сервера», чтобы просмотреть статус сервера в формате 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. Мы начали с установки приложения и посмотрели, как предоставить доступ, настроив разрешения для двух разных пользователей.