1. 序章

このチュートリアルでは、TomcatManagerアプリケーションについて詳しく見ていきます。

簡単に言うと、Tomcat Manager Appは、Tomcatサーバーにパッケージ化された Webアプリケーションであり、デプロイされたWebアプリケーションを管理するために必要な基本機能を提供します。

これから説明するように、アプリケーションには多くの機能とサービスがあります。 デプロイされたアプリケーションを管理できるだけでなく、サーバーとそのアプリケーションのステータスと構成も確認できます。

2. Tomcatのインストール

Tomcat Managerアプリを詳しく調べる前に、まずTomcatサーバーをインストールする必要があります。

幸い、Tomcatのインストールは簡単なプロセスです。 Tomcatのインストールについては、 ApacheTomcatの概要ガイドを参照してください。 このチュートリアルでは、最新のTomcat9バージョンを使用します。

3. TomcatManagerアプリへのアクセス

それでは、TomcatManagerアプリの使用方法を見てみましょう。 ここには2つのオプションがあります。Webベース(HTML)アプリケーションまたはテキストベースのWebサービスのどちらを使用するかを選択できます。

テキストベースのサービスはスクリプト作成に理想的ですが、HTMLアプリケーションは人間向けに設計されています。

Webベースのアプリケーションは次の場所で入手できます:

  • http [s]:// / manager / html /

対応するテキストサービスは次の場所で利用できます:

  • http [s]:// / 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>

ご覧のとおり、2人の新しいユーザーを追加しました。

  • tomcatgui manager-gui の役割があり、Webベースのアプリケーションを使用できます
  • tomcattext manager-script の役割があり、テキストベースのWebサービスを使用できます

次のセクションでは、これら2人のユーザーを使用してTomcatManagerアプリの機能をデモンストレーションする方法を説明します。

4. 現在デプロイされているアプリケーションの一覧表示

このセクションでは、現在デプロイされているアプリケーションのリストを表示する方法を学習します。

4.1. Webの使用

http:// localhost:8080 / manager / html / を開いて、TomcatManagerアプリのWebページを表示してみましょう。 そのためには、tomcatguiユーザーとして認証する必要があります。

ログインすると、Webページの上部に展開されているすべてのアプリケーションが一覧表示されます。 アプリケーションごとに、アプリケーションが実行されているかどうか、コンテキストパス、およびアクティブなセッションの数を確認できます。 アプリケーションの管理に使用できるボタンもいくつかあります。

4.2. テキストサービスの使用

または、テキストWebサービスを使用して、デプロイされたすべてのアプリケーションを一覧表示することもできます。 今回は、tomcattextユーザーを使用してcurlリクエストを作成して認証します。

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

Webページと同様に、応答には、デプロイされたすべてのアプリケーションと、現在の状態およびアクティブなセッションの数が表示されます。 たとえば、 manager アプリケーションが実行されており、アクティブなセッションが1つあることがわかります。

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アプリで実行できる重要な機能の1つは、アプリケーションの停止、開始、および再ロードです。

5.1. Webの使用

Webアプリケーションの場合、アプリケーションの停止と開始は、Webページのボタンをクリックするだけです。 結果と問題は、ページ上部のメッセージフィールドに報告されます。

5.2. テキストサービスの使用

同様に、テキストサービスを使用してアプリケーションを停止および開始できます。 curl リクエストを使用して、examplesアプリケーションを停止してから開始しましょう。

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]

path クエリパラメータは、管理するアプリケーションを示し、アプリケーションのコンテキストパスと一致する必要があります。

アプリケーションをリロードして、クラスまたはリソースへの変更を取得することもできます。 ただし、これは、ディレクトリに解凍され、WARファイルとして展開されていないアプリケーションに対してのみ機能します。

テキストサービスを使用してdocsアプリケーションをリロードする方法の例を次に示します。

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

ただし、Webアプリケーションで同じことを実現するには、リロードボタンをクリックするだけで済みます。

6. 期限切れのセッション

アプリケーションの管理に加えて、ユーザーセッションの管理を行うことができます。 Tomcat Managerアプリは、現在のユーザーセッションの詳細を表示し、セッションを手動で期限切れにすることができます。

6.1. Webインターフェイス経由

リストされているすべてのアプリケーションのSessions列のリンクをたどると、現在のユーザーセッションを表示できます。

以下の例では、managerアプリケーションに2つのユーザーセッションがあることがわかります。 セッションの期間、非アクティブになっている時間、および期限切れになるまでの時間(デフォルトでは30分)が表示されます。

セッションを選択して選択したセッションを無効にするを選択することにより、セッションを手動で破棄することもできます。

ホームページには、セッションを期限切れにするボタンがあります。 これにより、指定された分数の間アイドル状態になっているセッションも破棄されます。

6.2. テキストWebサービス経由

繰り返しますが、同等のテキストサービスは簡単です。

現在のユーザーセッションの詳細を表示するには、目的のアプリケーションのコンテキストパスを使用してsessionエンドポイントを呼び出します。 この例では、現在managerアプリケーションに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

非アクティブなユーザーセッションを破棄する場合は、Expireエンドポイントを使用します。 この例では、managerアプリケーションで10分を超えて非アクティブになっているセッションを期限切れにします。

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

7. アプリケーションの展開

アプリケーションを管理する方法を確認したので、新しいアプリケーションをデプロイする方法を見てみましょう。

開始するには、Tomcat sample WARをダウンロードして、新しいアプリケーションをデプロイします。

7.1. Webの使用

これで、Webページを使用して新しいサンプルWARを展開するためのいくつかのオプションがあります。 最も簡単な方法は、サンプルWARファイルをアップロードしてデプロイすることです

WARは、WARの名前と一致するコンテキストパスで展開されます。 成功すると、サンプルアプリケーションが展開され、開始され、アプリケーションのリストに表示されます。 コンテキストパスで/sample リンクをたどると、実行中のサンプルアプリケーションを表示できます。

同じアプリケーションを再度デプロイできるように、アンデプロイボタンをクリックしてみましょう。 名前が示すように、これはアプリケーションをアンデプロイします。 これにより、デプロイされたアプリケーションのすべてのファイルとディレクトリも削除されることに注意してください。

次に、ファイルパスを指定して、サンプルWARファイルをデプロイできます。 WARファイルまたは解凍されたディレクトリへのファイルパスURIとコンテキストパスを指定します。 この場合、サンプルWARは / tmp ディレクトリにあり、コンテキストパスを /sampleに設定しています。

または、XMLデプロイメント記述子へのファイルパスを指定することもできます。 このアプローチにより、アプリケーションのデプロイ方法と実行方法に影響を与える追加の属性を指定できます。 以下の例では、サンプルのWARアプリケーションをデプロイし、リロード可能にしています。

デプロイメント記述子で指定されたパスはすべて無視されることに注意してください。 コンテキストパスは、デプロイメント記述子のファイル名から取得されます。 共通属性を見て、その理由と、他のすべての可能な属性の説明を理解してください。

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

7.2. テキストサービスの使用

次に、テキストサービスを使用したアプリケーションのデプロイを見てみましょう。

まず、サンプルアプリケーションをアンデプロイしましょう。

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

再度デプロイするには、サンプルWARファイルのコンテキストパスとロケーションURIを指定します。

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

さらに、XMLデプロイメント記述子を使用してアプリケーションをデプロイすることもできます。

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

8. SSL構成の表示

SSL構成を確認する前に、TomcatSSLを有効にする必要があります。 まず、Tomcatのconfディレクトリに自己署名証明書を使用して新しい証明書キーストアを作成しましょう。

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

次に、 conf / tomcat-server.xml ファイルを変更して、Tomcatで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>

Tomcatを再起動すると、ポート8443で安全に実行されていることがわかります。

8.1. Webの使用

https:// localhost:8443 / manager / html を開いて、TomcatManagerアプリをもう一度表示してみましょう。 まったく同じように見えるはずです。

これで、診断の下のボタンを使用してSSL構成を表示できます。

  • 暗号ボタンは、Tomcatが理解できるすべてのSSL暗号を表示します
  • 次に、証明書ボタンに自己署名証明書の詳細が表示されます
  • 最後に、信頼できる証明書ボタンには、信頼できるCA証明書の詳細が表示されます。 この例では、信頼できるCA証明書を追加していないため、関心のあるものは何も表示されません。

また、SSL構成ファイルはいつでも動的に再ロードできます。 ホスト名を入力することで、仮想ホストごとに再ロードできます。 それ以外の場合は、すべての構成が再読み取りされます。

8.2. テキストサービスの使用

同様に、テキストサービスを使用して同じ情報を取得できます。 すべてを表示できます:

  • sslConnectorCiphers リソースを使用したSSL暗号:
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorCiphers"
  • sslConnectorCerts リソースを使用する証明書:
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorCerts"
  • sslConnectorTrustedCerts リソースを使用した信頼できる証明書:
curl -ku tomcattext:baeldung "https://localhost:8443/manager/text/sslConnectorTrustedCerts"

SSL 構成は、以下を使用して再ロードできます。

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

自己署名証明書を使用しているため、curlコマンドの-kオプションに注意してください。

9. サーバーステータスの表示

Tomcat Managerアプリは、サーバーのステータスとデプロイされたアプリケーションも表示します。 これらのページは、全体的な使用統計を表示する場合に特に便利です。

右上に表示されているサーバーステータスリンクをたどると、サーバーの詳細が表示されます。 完全なサーバーステータスリンクには、アプリケーションの詳細が表示されます。

対応するテキストサービスはありません。 ただし、サーバーステータスリンクを変更して、サーバーステータスをXMLで表示することはできます。 残念ながら、完全なサーバーステータスリンクに対して同じことを行うと、使用しているTomcatのバージョンによっては機能する場合と機能しない場合があります。

10. 構成の保存

テキストサービスを使用すると、現在の構成をTomcat conf /server.xmlに保存できます。 これは、構成を変更し、後で使用するために保存する場合に非常に便利です。

ありがたいことに、これは以前の conf / server.xml もバックアップしますが、以前のコメントは新しい conf /server.xml構成ファイルで削除される可能性があります。

ただし、これを行う前に、新しいリスナーを追加する必要があります。 conf / server.xml を編集し、既存のリスナーのリストの最後に以下を追加します。

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

Tomcatを再起動したら、次を使用して構成を保存できます。

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

11. 診断

最後に、TomcatManagerアプリが提供する追加の診断機能を見てみましょう。

11.1. スレッドダンプ

テキストサービスを使用して、実行中のTomcatサーバーのスレッドダンプを取得できます:

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.2. メモリリークの検索

Tomcatは通常、メモリリークを防ぐのに適しています。 ただし、メモリリークが疑われる場合は、TomcatManagerアプリにメモリリーク検出サービスがあります。 完全なガベージコレクションを実行し、アプリケーションが最後にリロードされてからまだメモリに存在するクラスを検出します。

リークを検出するには、Webページの FindLeaksボタンを実行するだけです。

同様に、テキストサービスはメモリリーク検出を実行できます。

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

11.3. 利用可能なリソースの表示

テキストサービスは、利用可能なリソースのリストを提供します。 この例では、1つのインメモリデータベースが利用可能であることがわかります。

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

12. 結論

この記事では、TomcatManagerアプリについて詳しく見てきました。 まず、アプリケーションをインストールし、2人の異なるユーザーのアクセス許可を構成してアクセスを許可する方法を確認しました。

次に、WebベースのアプリケーションとテキストベースのWebサービスを使用していくつかの例を調べました。 さまざまな方法を使用して、アプリケーションを表示、管理、およびデプロイする方法を確認しました。 次に、サーバーの構成とステータスを表示する方法を確認しました。

Tomcat Managerアプリの詳細については、オンラインのドキュメントを確認してください。