Skip to content
Server Plugin

Velocity

필수 의존성: io.ktor:ktor-server-velocity

코드 예제: velocity

Native 서버
Ktor는 Kotlin/Native를 지원하며 추가 런타임이나 가상 머신 없이 서버를 실행할 수 있게 해줍니다.
지원: ✖️

Ktor에서는 Velocity 플러그인을 설치하여 Velocity 템플릿을 애플리케이션의 뷰(view)로 사용할 수 있습니다.

의존성 추가

Velocity을(를) 사용하려면 빌드 스크립트에 ktor-server-velocity 아티팩트를 포함해야 합니다:

Kotlin
Groovy
XML

Velocity 설치

애플리케이션에 Velocity 플러그인을 설치하려면, 지정된

모듈
모듈을 사용하면 라우트를 그룹화하여 애플리케이션을 구조화할 수 있습니다.
내의 install 함수에 전달하세요. 아래 코드 스니펫은 Velocity을(를) 설치하는 방법을 보여줍니다...

  • ... embeddedServer 함수 호출 내부에서 설치.
  • ... Application 클래스의 확장 함수로 명시적으로 정의된 module 내부에서 설치.
kotlin
kotlin

선택적으로, 표준 및 사용자 정의 Velocity 도구를 추가할 수 있는 기능을 제공하는 VelocityTools 플러그인을 설치할 수 있습니다.

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)

지정된 라우트에 대해 템플릿을 사용하려면, 다음과 같이 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 {
        // 엔진 설정
        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) // 사용자 정의 도구 추가
}