

서버 사이드 HTML 렌더링 (SSR)
네츄럴 템플릿
스프링 통합 지원
타임리프를 사용하려면 다음 선언을 하면 된다.
<html xmlns:th="[http://www.thymeleaf.org](http://www.thymeleaf.org/)">
${...}*{...}#{...}@{...}~{...}'one text', 'Another one!',…0, 34, 3.0, 12.3,…true, falsenullone, sometext, main,…+|The name is ${name}|+, -, *, /, %-and, or!, not>, <, >=, <= (gt, lt, ge, le)==, != (eq, ne)(if) ? (then)(if) ? (then) : (else)(value) ?: (defaultvalue)_타임리프는 기본적으로 HTML 태그의 속성에 기능을 정의해서 동작한다.
th:textHTML의 콘텐츠(content)에 데이터를 출력할 때 사용
<span th:text="${data}"></span>
[[...]]HTML 테그의 속성이 아니라 HTML 콘텐츠 영역안에서 직접 데이터를 출력하고 싶을때 사용
<span>hello [[${data}]]</span>
BasicController
package hello.thymeleaf.basic;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/basic")
public class basicController {
@GetMapping("text-basic")
public String textBasic(Model model) {
model.addAttribute("data", "Hello <b>Spring!</b>");
return "basic/text-basic";
}
}
/resources/templates/basic/text-basic.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>컨텐츠에 데이터 출력하기</h1>
<ul>
<li>th:text 사용 <span th:text="${data}"></span></li>
<li>컨텐츠 안에서 직접 출력하기 = [[${data}]]</li>
</ul>
</body>
</html>
실행결과

HTML 문서는 < , > 같은 특수 문자를 기반으로 정의된다.
따라서 뷰 템플릿으로 HTML 화면을 생성할 때는 출력하는 데이터에 이러한 특수 문자가 있는 것을 주의해서 사용해야 한다.
HTML에서 사용하는 특수 문자를HTML 엔티티로 변경하는 것을 이스케이프(escape)라 한다.
타임리프가 제공하는 th:text , [[...]] 는 기본적으로 이스케이스(escape)를 제공한다.
HTML 엔티티
HTML의 예약어(<, >)가 아닌 문자로 표현해 표기의 혼란을 막기 위해서 사용하는 것
< → <
> → >
공백 → $nbsp;

이스케이프 기능을 사용하지 않는 방법
th:utext**[(...)]**basicController
@Controller
@RequestMapping("/basic")
public class basicController {
...
@GetMapping("text-unescaped")
public String textUnescaped(Model model) {
model.addAttribute("data", "Hello <b>Spring!</b>");
return "basic/text-unescaped";
}
}
/resources/templates/basic/text-unescaped.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>text vs utext</h1>
<ul>
<li>th:text = <span th:text="${data}"></span></li>
<li>th:utext = <span th:utext="${data}"></span></li>
</ul>
<h1><span th:inline="none">[[...]] vs [(...)]</span></h1>
<ul>
<li><span th:inline="none">[[...]] = </span>[[${data}]]</li>
<li><span th:inline="none">[(...)] = </span>[(${data})]</li>
</ul>
</body>
</html>
th:inline은 이 태그안에 있는 내용은 타임리프가 해석하지말라는 의미의 옵션이다.
타임리프는 [[...]] 를 해석하기 때문에, 화면에 [[...]] 글자를 그냥은 보여줄 수가 없다.
실행결과
