Skip to content

WAR

Ktorアプリケーションは、TomcatやJettyを含むサーブレットコンテナ内で実行およびデプロイできます。サーブレットコンテナ内にデプロイするには、WARアーカイブを生成し、それをWARをサポートするサーバーまたはクラウドサービスにデプロイする必要があります。

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

  • サーブレットアプリケーションでKtorを使用するように設定する。
  • WARアプリケーションの実行とパッケージングのためにGrettyとWarプラグインを適用する。
  • Ktorサーブレットアプリケーションを実行する。
  • WARアーカイブを生成してデプロイする。

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

Ktorは、必要なエンジン(Netty、Jetty、Tomcatなど)を使って、アプリケーション内でサーバーを作成および起動することを可能にします。この場合、アプリケーションはエンジンの設定、接続、SSLオプションを制御できます。

上記のアプローチとは対照的に、サーブレットコンテナがアプリケーションのライフサイクルと接続設定を制御する必要があります。Ktorは、アプリケーションの制御をサーブレットコンテナに委譲する特別なServletApplicationEngineエンジンを提供します。

接続とSSLの設定は、Ktorアプリケーションがサーブレットコンテナ内にデプロイされている場合、有効にならないことに注意してください。 tomcat-war-sslサンプルは、TomcatでSSLを設定する方法を示しています。

依存関係の追加

サーブレットアプリケーションでKtorを使用するには、ktor-server-servlet-jakartaアーティファクトをビルドスクリプトに含める必要があります。

Kotlin
Groovy
XML

Tomcat/Jettyの9.x以前のバージョンを使用している場合は、代わりにktor-server-servletアーティファクトを追加してください。

Ktorアプリケーションがサーブレットコンテナ内にデプロイされている場合、個別のJettyまたはTomcatのアーティファクトは必要ないことに注意してください。

サーブレットの設定

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

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 "4.0.3"
}

次に、grettyブロックで以下のように設定できます。

groovy
gretty {
    servletContainer = "jetty11"
    contextPath = "/"
    logbackConfigFile = "src/main/resources/logback.xml"
}
groovy
gretty {
    servletContainer = "tomcat10"
    contextPath = "/"
    logbackConfigFile = "src/main/resources/logback.xml"
}

最後に、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

jetty-war.warbuild/libsディレクトリに作成されます。生成されたアーカイブは、jetty/webappsディレクトリにコピーすることで、サーブレットコンテナ内にデプロイできます。例えば、以下のDockerfileは、作成されたWARをJettyまたはTomcatサーブレットコンテナ内で実行する方法を示しています。

Docker
FROM jetty:11.0.25
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.41
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