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/templates
にindex.vl
テンプレートがあるとします。
html
<html>
<body>
<h1>Hello, $user.name</h1>
</body>
</html>
ユーザーのデータモデルは次のようになります。
kotlin
data class User(val id: Int, val name: String)
指定されたルートにテンプレートを使用するには、VelocityContent
をcall.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
}