Skip to content

WAR

TomcatやJettyなどのサーブレットコンテナ内でKtorアプリケーションを実行できます。これを行うには、アプリケーションをWARアーカイブとしてパッケージ化し、WARデプロイをサポートするサーバーまたはクラウドサービスにデプロイする必要があります。

このトピックでは、以下の方法について説明します。

サーブレットアプリケーションでのKtorの設定

Ktorでは、特定のエンジン(Netty、Jetty、Tomcatなど)を使用してサーバーを作成および起動プロセスを、アプリケーション内で直接行うことができます。このセットアップでは、アプリケーションがエンジンの構成、接続、SSL設定を制御します。

サーブレットコンテナにデプロイする場合、コンテナがアプリケーションのライフサイクルと接続構成を制御します。このために、Ktorはアプリケーションの制御をサーブレットコンテナに委譲するServletApplicationEngineエンジンを提供しています。

サーブレットコンテナ内で実行する場合、設定ファイルで定義されたKtorの接続およびSSL設定は適用されません。

TomcatでのSSL構成については、tomcat-war-sslサンプルを参照してください。

依存関係の追加

サーブレットアプリケーションでKtorを使用するには、ktor-server-servlet-jakartaアーティファクトをビルドスクリプトに追加します。

Kotlin
Groovy
XML

サーブレットコンテナにデプロイする場合、個別のJettyまたはTomcatエンジンの依存関係を追加する必要はありません。

サーブレットの構成

アプリケーションにKtorサーブレットを登録するには、WEB-INF/web.xmlファイルを開き、servlet-class属性にServletApplicationEngineを割り当てます。

xml
<servlet>
    <display-name>KtorServlet</display-name>
    <servlet-name>KtorServlet</servlet-name>
    <servlet-class>io.ktor.server.servlet.jakarta.ServletApplicationEngine</servlet-class>
    <init-param>
        <param-name>io.ktor.ktor.config</param-name>
        <param-value>application.conf</param-value>
    </init-param>
    <async-supported>true</async-supported>
</servlet>
XML

次に、このサーブレットのURLパターンを構成します。

xml
<servlet-mapping>
    <servlet-name>KtorServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Grettyプラグインの構成

Grettyプラグインを使用すると、JettyおよびTomcat上でサーブレットアプリケーションを実行できます。

プラグインを適用するには、build.gradle.ktsファイルを開き、pluginsブロックに次のエントリを追加します。

groovy
plugins {
    id("org.gretty") version "5.0.1"
}

その後、次のようにgrettyブロックで構成できます。

groovy
gretty {
    servletContainer = "jetty12"
    contextPath = "/"
}
groovy
gretty {
    servletContainer = "tomcat10"
    contextPath = "/"
}

最後に、runタスクを構成します。

groovy
afterEvaluate {
    tasks.getByName("run") {
        dependsOn("appRun")
    }
}

Warプラグインの構成

Warプラグインを使用すると、サーブレットコンテナへのデプロイ用のWARアーカイブを生成できます。

プラグインを適用するには、build.gradle.ktsファイルを開き、pluginsブロックに次のエントリを追加します。

groovy
plugins {
    id("war")
}

アプリケーションの実行

構成済みのGrettyプラグインを使用して、runタスクでサーブレットアプリケーションを実行できます。たとえば、jetty-warサンプルプロジェクトを実行するには、次のコマンドを実行します。

Bash
./gradlew :jetty-war:run

WARアーカイブの生成とデプロイ

Warプラグインを使用してWARアーカイブを生成するには、warタスクを実行します。jetty-warサンプルプロジェクトの場合、コマンドは次のようになります。

Bash
./gradlew :jetty-war:war

タスクが完了すると、対応するモジュールのbuild/libsディレクトリにjetty-war.warが生成されます。

生成されたアーカイブをデプロイするには、ファイルをサーブレットコンテナのjetty/webappsディレクトリにコピーします。

次のDockerfileの例は、生成されたWARファイルをJettyまたはTomcatサーブレットコンテナ内で実行する方法を示しています。

Docker
FROM jetty:12.0.29
EXPOSE 8080:8080
COPY ./build/libs/jetty-war.war/ /var/lib/jetty/webapps
WORKDIR /var/lib/jetty
CMD ["java","-jar","/usr/local/jetty/start.jar"]
Docker
FROM tomcat:10.1.50
EXPOSE 8080:8080
COPY ./build/libs/tomcat-war.war/ /usr/local/tomcat/webapps
WORKDIR /usr/local/tomcat
CMD ["catalina.sh", "run"]

完全な例については、jetty-warおよびtomcat-warを参照してください。