JTE
필수 의존성: io.ktor:ktor-server-jte
코드 예제: jte
Ktor에서는 Jte 플러그인을 설치하여 JTE 템플릿을 애플리케이션의 뷰(view)로 사용할 수 있습니다.
의존성 추가
Jte을 사용하려면 빌드 스크립트에 ktor-server-jte 아티팩트를 포함해야 합니다.
.kte 파일을 처리하려면 프로젝트에 gg.jte:jte-kotlin 아티팩트를 추가하세요.
현재
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 플러그인을 설치하려면, 지정된
install 함수에 전달하세요. 아래의 코드 스니펫은 Jte을 설치하는 방법을 보여줍니다... - ...
embeddedServer함수 호출 내부에서 설치. - ...
Application클래스의 확장 함수인 명시적으로 정의된module내부에서 설치.
install 블록 내부에서 JTE 템플릿을 로드하는 방식을 구성할 수 있습니다.
Jte 구성
템플릿 로딩 구성
JTE 템플릿을 로드하려면 다음 단계가 필요합니다.
- 템플릿 코드를 해석(resolve)하는 데 사용되는
CodeResolver를 생성합니다. 예를 들어, 지정된 디렉토리에서 템플릿을 로드하도록DirectoryCodeResolver를 구성하거나, 애플리케이션 리소스에서 템플릿을 로드하도록ResourceCodeResolver를 구성할 수 있습니다. templateEngine속성을 사용하여 템플릿 엔진을 지정합니다. 이 엔진은 생성된CodeResolver를 사용하여 템플릿을 네이티브 Java/Kotlin 코드로 변환합니다.
예를 들어, 아래의 코드 스니펫은 Ktor가 templates 디렉토리에서 JTE 템플릿을 찾을 수 있도록 설정합니다.
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 템플릿이 있다고 가정해 보겠습니다.
@param id: Int
@param name: String
<html>
<body>
<h1>Hello, ${name}!</h1>
</body>
</html>지정된 라우트(route)에서 템플릿을 사용하려면 다음과 같이 call.respond 메서드에 JteContent를 전달하세요.
get("/index") {
val params = mapOf("id" to 1, "name" to "John")
call.respond(JteContent("index.kte", params))
}