Ktor includes support for FreeMarker templates through the FreeMarker feature. Initialize the FreeMarker feature with a TemplateLoader:
install(FreeMarker) {
templateLoader = ClassTemplateLoader(TheApp::class.java.classLoader, "templates")
}
This TemplateLoader sets up FreeMarker to look for the template files on the classpath in the “templates” package, relative to the current class path. A basic template looks like this:
io.ktor.freemarker.FreeMarker
in the artifact io.ktor:ktor-freemarker:$ktor_version
.
dependencies {
compile "io.ktor:ktor-freemarker:$ktor_version"
}
dependencies {
compile("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>
With that template in resources/templates
it is accessible elsewhere in the the application
using the call.respond()
method:
get("/{...}") {
val user = User("user name", "user@example.com")
call.respond(FreeMarkerContent("index.ftl", mapOf("user" to user), "e"))
}