Skip to content
Server Plugin

JTE

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

코드 예제: jte

네이티브 서버
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
지원: ✖️

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

의존성 추가

Jte을 사용하려면 빌드 스크립트에 ktor-server-jte 아티팩트를 포함해야 합니다.

Kotlin
Groovy
XML

.kte 파일을 처리하려면 프로젝트에 gg.jte:jte-kotlin 아티팩트를 추가하세요.

Kotlin
Groovy
XML

현재 jte‑kotlin 컴파일러 플러그인은 Kotlin 2.3.x와 호환되지 않습니다. Ktor 3.4.0은 Kotlin 2.3 툴체인을 사용하므로, jte‑kotlin 플러그인이 Kotlin 2.3 지원을 추가할 때까지 Ktor JTE 플러그인을 사용할 수 없습니다.

JTE를 사용해야 하는 경우, jte‑kotlin이 Kotlin 2.3용으로 업데이트될 때까지 Kotlin 2.2.x 및 호환되는 Ktor 버전을 사용하세요.

Jte 설치

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

모듈
Modules allow you to structure your application by grouping routes.
install 함수에 전달하세요. 아래의 코드 스니펫은 Jte을 설치하는 방법을 보여줍니다...

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

install 블록 내부에서 JTE 템플릿을 로드하는 방식을 구성할 수 있습니다.

Jte 구성

템플릿 로딩 구성

JTE 템플릿을 로드하려면 다음 단계가 필요합니다.

  1. 템플릿 코드를 해석(resolve)하는 데 사용되는 CodeResolver를 생성합니다. 예를 들어, 지정된 디렉토리에서 템플릿을 로드하도록 DirectoryCodeResolver를 구성하거나, 애플리케이션 리소스에서 템플릿을 로드하도록 ResourceCodeResolver를 구성할 수 있습니다.
  2. templateEngine 속성을 사용하여 템플릿 엔진을 지정합니다. 이 엔진은 생성된 CodeResolver를 사용하여 템플릿을 네이티브 Java/Kotlin 코드로 변환합니다.

예를 들어, 아래의 코드 스니펫은 Ktor가 templates 디렉토리에서 JTE 템플릿을 찾을 수 있도록 설정합니다.

kotlin
import gg.jte.TemplateEngine
import gg.jte.resolve.DirectoryCodeResolver
import io.ktor.server.application.*
import io.ktor.server.jte.*
import java.nio.file.Path

fun Application.module() {
    install(Jte) {
        val resolver = DirectoryCodeResolver(Path.of("templates"))
        templateEngine = TemplateEngine.create(resolver, gg.jte.ContentType.Html)
    }
}

응답으로 템플릿 보내기

templates 디렉토리에 다음과 같은 index.kte 템플릿이 있다고 가정해 보겠습니다.

html
@param id: Int
@param name: String
<html>
    <body>
        <h1>Hello, ${name}!</h1>
    </body>
</html>

지정된 라우트(route)에서 템플릿을 사용하려면 다음과 같이 call.respond 메서드에 JteContent를 전달하세요.

kotlin
get("/index") {
    val params = mapOf("id" to 1, "name" to "John")
    call.respond(JteContent("index.kte", params))
}