Skip to content
Server Plugin

Velocity

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

代码示例: velocity

原生服务器
Ktor 支持 Kotlin/Native,并允许您无需额外运行时或虚拟机即可运行服务器。
支持: ✖️

Ktor 允许您通过安装 Velocity 插件,在应用程序中使用 Velocity 模板 作为视图。

添加依赖项

要使用 Velocity,您需要在构建脚本中包含 ktor-server-velocity artifact:

Kotlin
Groovy
XML

安装 Velocity

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

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

  • ... 在 embeddedServer 函数调用内部。
  • ... 在显式定义的模块(它是 Application 类的扩展函数)内部。
kotlin
kotlin

可选地,您可以安装 VelocityTools 插件,以便能够添加标准和自定义的 Velocity 工具

配置 Velocity

配置模板加载

install 代码块内部,您可以配置 VelocityEngine。例如,如果您想使用 classpath 中的模板,请为 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)

要将该模板用于指定的 route,请按如下方式将 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 {
        // 引擎配置
        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) // 添加一个自定义工具
}