Skip to content
Server Plugin

Velocity

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

コード例: velocity

ネイティブサーバー
KtorはKotlin/Nativeをサポートしており、追加のランタイムや仮想マシンなしでサーバーを実行できます。
のサポート: ✖️

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

依存関係を追加する

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

Kotlin
Groovy
XML

Velocityをインストールする

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

モジュール
モジュールを使用すると、ルートをグループ化してアプリケーションを構造化できます。
内のinstall関数に渡します。以下のコードスニペットは、Velocityをインストールする方法を示しています...

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

オプションで、標準およびカスタムのVelocityツールを追加する機能を持つVelocityToolsプラグインをインストールできます。

Velocityを設定する

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

installブロック内で、VelocityEngineを設定できます。例えば、クラスパスからテンプレートを使用したい場合は、classpath用のリソースローダーを使用します。

kotlin
import io.ktor.server.application.*
import io.ktor.server.velocity.*
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
import org.apache.velocity.runtime.RuntimeConstants

fun Application.module() {
    install(Velocity) {
        setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath")
        setProperty("classpath.resource.loader.class", ClasspathResourceLoader::class.java.name)
    }
}

レスポンスでテンプレートを送信する

resources/templatesindex.vlテンプレートがあるとします。

html
<html>
    <body>
        <h1>Hello, $user.name</h1>
    </body>
</html>

ユーザーのデータモデルは次のようになります。

kotlin
data class User(val id: Int, val name: String)

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

kotlin
get("/index") {
    val sampleUser = User(1, "John")
    call.respond(VelocityContent("templates/index.vl", mapOf("user" to sampleUser)))
}

Velocityツールを追加する

VelocityToolsプラグインをインストールしている場合、installブロック内でEasyFactoryConfigurationインスタンスにアクセスして、標準およびカスタムのVelocityツールを追加できます。例えば、次のようになります。

kotlin
install(VelocityTools) {
    engine {
        // Engine configuration
        setProperty("resource.loader", "string")
        addProperty("resource.loader.string.name", "myRepo")
        addProperty("resource.loader.string.class", StringResourceLoader::class.java.name)
        addProperty("resource.loader.string.repository.name", "myRepo")
    }
    addDefaultTools() // Add a default tool
    tool("foo", MyCustomTool::class.java) // Add a custom tool
}