Velocity
必須依存関係: io.ktor:ktor-server-velocity
コード例: velocity
Ktor では、Velocity プラグインをインストールすることで、Velocity テンプレートをアプリケーション内のビューとして使用できます。
依存関係の追加
Velocity を使用するには、ビルドスクリプトに ktor-server-velocity アーティファクトを含める必要があります。
Velocity のインストール
アプリケーションに Velocity プラグインをインストールするには、指定された
install 関数に渡します。 以下のコードスニペットは、Velocity のインストール方法を示しています... - ...
embeddedServer関数の呼び出し内。 - ... 明示的に定義された
module(Applicationクラスの拡張関数)内。
オプションで、VelocityTools プラグインをインストールして、標準およびカスタムの Velocity ツールを追加する機能を利用することもできます。
Velocity の設定
テンプレート読み込みの設定
install ブロック内で、VelocityEngine を設定できます。例えば、クラスパスからテンプレートを使用する場合は、classpath 用のリソースローダーを使用します。
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>
<body>
<h1>Hello, $user.name</h1>
</body>
</html>ユーザーのデータモデルは以下のようになります。
data class User(val id: Int, val name: String)指定されたルートに対してテンプレートを使用するには、以下のように VelocityContent を call.respond メソッドに渡します。
get("/index") {
val sampleUser = User(1, "John")
call.respond(VelocityContent("templates/index.vl", mapOf("user" to sampleUser)))
}Velocity ツールの追加
VelocityTools プラグインをインストールしている場合、install ブロック内で EasyFactoryConfiguration インスタンスにアクセスして、標準およびカスタムの Velocity ツールを追加できます。例えば以下のようになります。
install(VelocityTools) {
engine {
// エンジン設定
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() // デフォルトツールの追加
tool("foo", MyCustomTool::class.java) // カスタムツールの追加
}