Server Plugin
Velocity
필수 의존성: io.ktor:ktor-server-velocity
코드 예시: velocity
네이티브 서버 지원: ✖️ Ktor는 Kotlin/Native를 지원하며 추가 런타임 또는 가상 머신 없이 서버를 실행할 수 있습니다.
Ktor를 사용하면 Velocity 템플릿을 애플리케이션 내에서 뷰로 사용할 수 있습니다. 이를 위해 Velocity 플러그인을 설치하면 됩니다.
의존성 추가
Velocity
을(를) 사용하려면 빌드 스크립트에 ktor-server-velocity
아티팩트를 포함해야 합니다:
Kotlin
Groovy
XML
Velocity 설치
애플리케이션에 Velocity
플러그인을 설치하려면, 지정된
모듈
에서 모듈을 사용하면 경로를 그룹화하여 애플리케이션을 구조화할 수 있습니다.
install
함수에 전달합니다. 아래 코드 스니펫은 Velocity
을(를) 설치하는 방법을 보여줍니다... - ...
embeddedServer
함수 호출 내에서. - ...
Application
클래스의 확장 함수인 명시적으로 정의된module
내에서.
kotlin
kotlin
선택적으로, 표준 및 커스텀 Velocity 도구를 추가하는 기능을 사용하려면 VelocityTools
플러그인을 설치할 수 있습니다.
Velocity 구성
템플릿 로드 구성
install
블록 내에서 VelocityEngine을(를) 구성할 수 있습니다. 예를 들어, 클래스패스에서 템플릿을 사용하려면 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)
지정된 경로에 템플릿을 사용하려면, call.respond
메서드에 VelocityContent
를 다음과 같이 전달합니다:
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 {
// Engine configuration
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() // Add a default tool
tool("foo", MyCustomTool::class.java) // Add a custom tool
}