Skip to content
Server Plugin

JTE

必須の依存関係: io.ktor:ktor-server-jte

コード例: jte

Nativeサーバー
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
のサポート: ✖️

Ktorでは、Jteプラグインをインストールすることで、アプリケーション内のビューとしてJTEテンプレートを使用できます。

依存関係の追加

Jteを使用するには、ビルドスクリプトにktor-server-jteアーティファクトを含める必要があります。

Kotlin
Groovy
XML

.kteファイルを処理するには、プロジェクトにgg.jte:jte-kotlinアーティファクトを追加します。

Kotlin
Groovy
XML

現在のjte-kotlinコンパイラプラグインはKotlin 2.3.xと互換性がありません。 Ktor 3.4.0はKotlin 2.3ツールチェーンを使用しているため、jte-kotlinプラグインがKotlin 2.3のサポートを追加するまで、Ktor JTEプラグインは使用できません。

JTEに依存している場合は、jte-kotlinがKotlin 2.3用に更新されるまで、Kotlin 2.2.xと互換性のあるKtorバージョンを使用してください。

Jteのインストール

Jteプラグインをアプリケーションにインストールするには、指定された

モジュール
Modules allow you to structure your application by grouping routes.
内のinstall関数に渡します。 以下のコードスニペットは、Jteをインストールする方法を示しています...

  • ... embeddedServer関数の呼び出し内。
  • ... Applicationクラスの拡張関数である、明示的に定義されたmodule内。
kotlin
kotlin

installブロック内では、JTEテンプレートをロードする方法を設定できます。

Jteの設定

テンプレート読み込みの設定

JTEテンプレートをロードするには、以下を行う必要があります:

  1. テンプレートコードを解決するために使用されるCodeResolverを作成します。例えば、特定のディレクトリからテンプレートをロードするようにDirectoryCodeResolverを設定したり、アプリケーションリソースからテンプレートをロードするようにResourceCodeResolverを設定したりできます。
  2. templateEngineプロパティを使用してテンプレートエンジンを指定します。これは、作成されたCodeResolverを使用してテンプレートをネイティブのJava/Kotlinコードに変換します。

例えば、以下のコードスニペットにより、Ktorはtemplatesディレクトリ内でJTEテンプレートを探すようになります。

kotlin
import gg.jte.TemplateEngine
import gg.jte.resolve.DirectoryCodeResolver
import io.ktor.server.application.*
import io.ktor.server.jte.*
import java.nio.file.Path

fun Application.module() {
    install(Jte) {
        val resolver = DirectoryCodeResolver(Path.of("templates"))
        templateEngine = TemplateEngine.create(resolver, gg.jte.ContentType.Html)
    }
}

レスポンスでのテンプレート送信

templatesディレクトリにindex.kteテンプレートがあるとします。

html
@param id: Int
@param name: String
<html>
    <body>
        <h1>Hello, ${name}!</h1>
    </body>
</html>

指定されたルートに対してテンプレートを使用するには、次のようにJteContentcall.respondメソッドに渡します。

kotlin
get("/index") {
    val params = mapOf("id" to 1, "name" to "John")
    call.respond(JteContent("index.kte", params))
}