埋め込みTomcatでWebアプリケーションマネージャ(manager)を使用する方法

埋め込みTomcatでWebアプリケーションマネージャ(manager)を使用する方法

埋め込みTomcatでWebアプリケーションマネージャ(manager)を使用する方法について説明します。
埋め込みTomcatを使用することで、TomcatをJavaアプリケーション内に直接組み込んでWebアプリケーションを起動することができます。
これにより、従来のようにTomcatサーバーを別途インストールする必要がなくなり、アプリケーションのデプロイや管理が簡単になります。
さらに、Webアプリケーションマネージャを使用することで、アプリケーションのデプロイ、アンデプロイ、リロードなどの操作をWebインターフェースから簡単に行うことができます。

1. 埋め込みTomcatのセットアップ

まず、埋め込みTomcatの依存関係をプロジェクトに追加します。
Mavenを使用している場合は、pom.xmlに以下の依存関係を追加します。

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <version>9.0.74</version>
</dependency>
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  <version>9.0.74</version>
</dependency>
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-websocket</artifactId>
  <version>9.0.74</version>
</dependency>

次に、Javaコードで埋め込みTomcatを設定します。

import org.apache.catalina.startup.Tomcat;

public class EmbeddedTomcatServer {
  public static void main(String[] args) throws Exception {
    Tomcat tomcat = new Tomcat();
    tomcat.setPort(8080);

    // Webアプリケーションのコンテキストを追加
    tomcat.addWebapp("/", new File("src/main/webapp").getAbsolutePath());

    // Tomcatの開始
    tomcat.start();
    tomcat.getServer().await();
  }
}

このコードにより、埋め込みTomcatがポート8080で起動し、src/main/webappディレクトリにあるWebアプリケーションをデプロイします。

2. Webアプリケーションマネージャの設定

埋め込みTomcatでWebアプリケーションマネージャを使用するためには、tomcat-users.xmlファイルを設定する必要があります。
このファイルは、ユーザー認証とロールの管理を行います。
埋め込みTomcatを使用する場合、この設定をJavaコードで行うことができます。

以下のコードを使用して、Webアプリケーションマネージャ用のユーザーを設定します。

import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.users.MemoryUserDatabase;
import org.apache.catalina.users.MemoryUserDatabaseFactory;
import org.apache.tomcat.util.descriptor.web.LoginConfig;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;

public class EmbeddedTomcatWithManager {
  public static void main(String[] args) throws LifecycleException {
    Tomcat tomcat = new Tomcat();
    tomcat.setPort(8080);

    // ユーザーデータベースの設定
    MemoryUserDatabase userDatabase = new MemoryUserDatabaseFactory().createUserDatabase("Default");
    tomcat.getServer().addService(tomcat.getService());

    // マネージャユーザーを追加
    userDatabase.createUser("admin", "admin", "manager-gui");

    // Context設定
    Context ctx = tomcat.addWebapp("/", new File("src/main/webapp").getAbsolutePath());

    // Webアプリケーションマネージャの設定
    LoginConfig loginConfig = new LoginConfig();
    loginConfig.setAuthMethod("BASIC");
    ctx.setLoginConfig(loginConfig);

    SecurityConstraint securityConstraint = new SecurityConstraint();
    securityConstraint.addAuthRole("manager-gui");
    SecurityCollection collection = new SecurityCollection();
    collection.addPattern("/manager/*");
    securityConstraint.addCollection(collection);
    ctx.addConstraint(securityConstraint);

    // Tomcatの開始
    tomcat.start();
    tomcat.getServer().await();
  }
}

このコードは、Tomcatに対して「admin」というユーザー名と「admin」というパスワードを持つユーザーを作成し、manager-guiロールを割り当てます。
また、Webアプリケーションマネージャにアクセスするためのセキュリティ設定を行います。

3. Webアプリケーションマネージャへのアクセス

Tomcatが起動したら、Webブラウザを使用してWebアプリケーションマネージャにアクセスできます。
以下のURLにアクセスします。

http://localhost:8080/manager/html

アクセスすると、ユーザー名とパスワードの入力を求められます。
先ほど設定した「admin/admin」の組み合わせを入力すると、Webアプリケーションマネージャのインターフェースにアクセスできます。
このインターフェースでは、アプリケーションのデプロイ、停止、リロードなどの操作を行うことができます。

4. 埋め込みTomcatでのWebアプリケーションマネージャの利点

埋め込みTomcatでWebアプリケーションマネージャを使用することで、アプリケーションのライフサイクル管理が簡単になります。
特に、開発中のアプリケーションを素早くテストしたり、ローカルでのデプロイメントを効率化したりする場合に非常に便利です。
さらに、埋め込みTomcatを使用することで、アプリケーションが独立して動作するため、他のアプリケーションやサーバーに依存しない柔軟な開発環境を構築できます。

まとめ

埋め込みTomcatでWebアプリケーションマネージャを使用するためには、Tomcatの基本的なセットアップに加えて、ユーザー認証とセキュリティ設定を行う必要があります。
これにより、Webブラウザを通じて簡単にアプリケーションの管理操作を行うことができます。
埋め込みTomcatを使用することで、より効率的な開発およびデプロイメントのプロセスを実現できます。