Freemarkerテンプレートを使う

Estimated reading time: 1 minute

KtorはFreeMarkerテンプレートをFreeMarker Featureを通じてサポートしています。 TemplateLoaderとともにFreeMarker Featureを初期化します:

    install(FreeMarker) {
        templateLoader = ClassTemplateLoader(this::class.java.classLoader, "templates")
    }

このTemplateLoaderは、FreeMarkerがテンプレートファイルをクラスパス上で現在のクラスパスからの相対パスとして”templates”パッケージ内で見つけられるようにセットアップします。 基本的なテンプレートは以下のような見た目になります:

This feature is defined in the class io.ktor.freemarker.FreeMarker in the artifact io.ktor:ktor-freemarker:$ktor_version.
dependencies { implementation "io.ktor:ktor-freemarker:$ktor_version" }
dependencies { implementation("io.ktor:ktor-freemarker:$ktor_version") }
<project> ... <dependencies> <dependency> <groupId>io.ktor</groupId> <artifactId>ktor-freemarker</artifactId> <version>${ktor.version}</version> <scope>compile</scope> </dependency> </dependencies> </project>
<html>
<h2>Hello ${user.name}!</h2>

Your email address is ${user.email}
</html>

アプリケーション内のどこででもcall.respond()メソッドを利用することで、このresources/templatesのテンプレートにアクセスできます。

data class User(val name: String, val email: String)

get("/") {
	val user = User("user name", "user@example.com")
	call.respond(FreeMarkerContent("hello.ftl", mapOf("user" to user)))
}