1. 소개

ThymeleafSpring Boot 애플리케이션에 사용할 수있는 템플릿 엔진입니다 . 많은 것들과 마찬가지로 Spring Boot는 템플릿을 찾을 것으로 예상되는 기본 위치를 제공합니다 .

이 짧은 사용방법(예제)에서는 템플릿 위치를 변경하는 방법을 살펴 보겠습니다. 그런 다음 여러 위치를 갖는 방법을 배웁니다.

2. 설정

Thymeleaf를 사용하려면 적절한 Spring Boot 스타터pom.xml 에 추가해야합니다 .

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <versionId>2.2.2.RELEASE</versionId>
</dependency>

3. 기본 위치 변경

기본적으로 Spring Boot는 src / main / resources / templates 에서 템플릿을 찾습니다  . 템플릿을 거기에 넣고 하위 디렉터리에 구성 할 수 있으며 문제가 없습니다.

이제 모든 템플릿이 templates-2 라는 디렉토리에 있어야한다는 요구 사항이 있다고 가정 해 보겠습니다 .

인사를위한 템플릿을 생성하고 src / main / resources / templates-2에 넣습니다  .

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Enums in Thymeleaf</title>
</head>
<body>
    <h2>Hello from 'templates/templates-2'</h2>
</body>
</html>

컨트롤러도 필요합니다.

@GetMapping("/hello")
public String sayHello() {
    return "hello";
}

기본 설정을 중단 하고 application.properties 의 속성을 재정 의하여 templates-2 디렉토리  를 사용하도록 Spring Boot를 구성 해 보겠습니다  .

spring.thymeleaf.prefix=classpath:/templates-2/

이제 HelloController를 호출하면 hello.html 에서 인사말을 볼 수 있습니다 .

4. 여러 위치 사용

기본 위치를 변경하는 방법을 배웠으므로 이제 여러 템플릿 위치를 사용하는 방법을 살펴 보겠습니다.

이를 위해 ClassLoaderTemplateResolver 빈을 생성합니다 .

@Bean
public ClassLoaderTemplateResolver secondaryTemplateResolver() {
    ClassLoaderTemplateResolver secondaryTemplateResolver = new ClassLoaderTemplateResolver();
    secondaryTemplateResolver.setPrefix("templates-2/");
    secondaryTemplateResolver.setSuffix(".html");
    secondaryTemplateResolver.setTemplateMode(TemplateMode.HTML);
    secondaryTemplateResolver.setCharacterEncoding("UTF-8");
    secondaryTemplateResolver.setOrder(1);
    secondaryTemplateResolver.setCheckExistence(true);
        
    return secondaryTemplateResolver;
}

커스텀 빈에서 접두사를 사용중인 보조 템플릿 디렉토리 인 templates-2로 설정합니다. 또한 CheckExistance 플래그를 true로 설정 합니다 . 이것은 리졸버가 체인에서 작동하도록 허용하는 열쇠입니다.

이를 구성하면 애플리케이션이 기본 main / resources / templates 디렉토리 및 main / resources / templates-2의 템플릿을 사용할 수 있습니다 .

5. 오류

Thymeleaf로 작업 할 때 다음 오류가 표시 될 수 있습니다.

Error resolving template [hello], template might not exist or might not be accessible
  by any of the configured Template Resolvers

Thymeleaf가 어떤 이유로 템플릿을 찾을 수 없을 때이 메시지가 표시됩니다. 이에 대한 몇 가지 가능한 이유와이를 해결하는 방법을 살펴 보겠습니다.

5.1. 컨트롤러의 오타

이 오류는 단순한 오타 때문에 종종 볼 수 있습니다. 먼저 확인해야 할 것은 파일 이름에서 확장자를 뺀 파일 이름과 컨트롤러에서 요청하는 템플릿이 정확히 일치하는지 확인합니다. 하위 디렉터리를 사용하는 경우 해당 디렉터리도 올바른지 확인해야합니다.

또한이 문제는 특정 운영 체제의 문제 일 수 있습니다. Windows는 대소 문자를 구분하지 않지만 다른 운영 체제는 구분합니다. 예를 들어 로컬 Windows 시스템에서 모든 것이 잘 작동하는 경우이를 조사해야합니다.

5.2. 컨트롤러에 파일 확장자 포함

파일에는 일반적으로 확장자가 있으므로 컨트롤러에서 템플릿 경로를 반환 할 때 파일을 포함하는 것이 당연 할 수 있습니다. Thymeleaf는 자동으로 접미사를 추가하므로 제공하지 않아야합니다 .

5.3. 기본 위치를 사용하지 않음

src / main / resources / templates 이외의 다른 곳에 템플릿을 배치 한 경우에도이 오류가 표시됩니다 . 다른 위치를 사용하려면 spring.thymeleaf.prefix 속성을 설정 하거나 자체 ClassLoaderTemplateResolver 빈을 만들어 여러 위치를 처리해야합니다.

6. 결론

이 빠른 사용방법(예제)에서는 Thymeleaf 템플릿 위치에 대해 배웠습니다. 먼저 속성을 설정하여 기본 위치를 변경하는 방법을 살펴 보았습니다. 그런 다음 여러 위치를 사용하는 자체 ClassLoaderTemplateResolver만들어이를 기반으로 구축했습니다 .

우리는 Thymeleaf가 템플릿을 찾을 수 없을 때 보게 될 오류와이를 해결하는 방법에 대한 논의로 마무리했습니다.

항상 그렇듯이 예제 코드는 GitHub 에서 찾을 수 있습니다 .