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) // 添加一个自定义工具
}