Skip to content
Server Plugin

FreeMarker

所需依赖项: io.ktor:ktor-server-freemarker

代码示例: freemarker

原生服务器
模块允许你通过对路由进行分组来组织应用程序。
支持: ✖️

Ktor 允许你通过安装 FreeMarker 插件,在应用程序中将 FreeMarker 模板 用作视图。

添加依赖项

要使用 FreeMarker,你需要在构建脚本中包含 ktor-server-freemarker artifact:

Kotlin
Groovy
XML

安装 FreeMarker

要将 FreeMarker 插件安装到应用程序中, 将其传递给指定

模块
模块允许你通过对路由进行分组来组织应用程序。
中的 install 函数。 下面的代码片段展示了如何安装 FreeMarker ...

  • ... 在 embeddedServer 函数调用内部。
  • ... 在显式定义的 module 内部,它是一个 Application 类的扩展函数。
kotlin
kotlin

install 代码块内部,你可以配置所需的 TemplateLoader 来加载 FreeMarker 模板。

配置 FreeMarker

配置模板加载

要加载模板,你需要将所需的 TemplateLoader 类型赋值给 templateLoader 属性。例如,下面的代码片段使 Ktor 能够在相对于当前类路径的 templates 包中查找模板:

kotlin
import freemarker.cache.*
import io.ktor.server.application.*
import io.ktor.server.freemarker.*

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

在响应中发送模板

假设你在 resources/templates 中有一个 index.ftl 模板:

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

一个用户的数据模型如下所示:

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

要将模板用于指定的路由,请将 FreeMarkerContent 以以下方式传递给 call.respond 方法:

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