- 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용한다.
- 번외 : 클라이언트 사이드 렌더링 == JSP, 리엑트
- 타임리프는 HTML파일을 유지,렌더링 되어 직접 열어도 화면에 렌더링이 된다.
- JSP는 파일이 깨진다.
: th:text
<span th:text="${data}">
Controller의 model.addAttribute("data", "Hello Spring"); "data"가 "Hello Spring"으로 치환이 되어 반환된다.
: [[ ]]
Hello <b>Spring</b>
Hello <b>Spring$lt;/b>
🐱🏍 "<" 태그를 문자로 표현할수있는 방법이 필요함으로, HTML에서 사용하는 특수문자를 HTML엔티티로 변경하는것을 이스케이프 (Escape)라 한다.
th:text
, [[ ]]
는 기본적으로 이스케이프를 제공한다.th:text
➡️ th:utext
[[ ]]
➡️ [( )]
와 같이 바꿔 사용하면 우리가 진짜 원하던 태그의 기능 (글씨 진하게)으로 사용할 수 있고 이것을 언이스케이프라고 한다.
- 예시로 게시판을 사용자가 글을 작성할때 HTML 태그를 잘못 작성하여 적용이 되면 기능이 엉망이 될수있음.
- 기본으로 이스케이프 값을 사용하고, 꼭 필요할 경우만 언이스케이프 사용
✔ 변수 표현식 : ${...}
단순한 변수라면 ${data}로 바로 표현이 가능하지만, Object나, List, Map같은 컬렉션 객체는 다음과 같이 사용할 수 있다.
- data.field: data에서 field 프로퍼티 접근 (data.getField())
- data['field']: 위와 같다(data.getField())
- data.getField(): data에서 getField()메서드를 직접 호출 할 수 있다.
- list[0].field: List에서 첫 번째 데이터를 찾아 field 프로퍼티 접근한다.
- list[0]['field']: 위와 동일하다.
- list[0].getField(): List에서 첫 번째 회원을 찾아 메서드를 직접 호출 할 수 있다.
- list.get(0).xxx: List에서 get메서드를 통해 데이터를 찾아 프로퍼티 접근도 가능하다.
- map['key'].field: Map에서 key를 찾아 field 프로퍼티에 접근한다.
⇒ map.get('key').getField()와 동일하다.- map['key']['field']: 위와 동일하다.
- map['key'].getField(): Map에서 key를 찾아 직접 메서드를 호출해 value를 반환한다.
: th:with
지역 변수를 사용해, 선언한 태그 안에서만 사용가능하다.
✔ ${#request}
,${#response}
,${#session}
,@{#servletContext}
,${#locale}
HTTP get파라미터 접근 : ${param.paramData}
HTTP session 접근 : ${session.sessionData}
스프링 빈 접근 : ${@helloBean.hell("신재원")}
✔ 자바 8 이상에서는 LocalDateTime, LocalTime, 등 라이브러리가 자동으로 추가되어있음으로, 필요할 경우 메뉴얼 보고 사용한다.