Spring MVC 2편 타임리프 - 기본기능 1

신재원·2023년 1월 31일
0

Spring MVC 2편

목록 보기
1/26

[1] 타임리프 (tymeleaf) 란?

👀 타임리프 특징

✔ 1. 서버 사이드 HTML 렌더링 (SSR)

  • 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용한다.
    • 번외 : 클라이언트 사이드 렌더링 == JSP, 리엑트

✔ 2. 네츄럴 템플릿

  • 타임리프는 HTML파일을 유지,렌더링 되어 직접 열어도 화면에 렌더링이 된다.
    • JSP는 파일이 깨진다.

✔ 3. 스프링 통합 지원

[2] 텍스트 - text, utext

✔ 1. HTML의 콘텐츠 (content)에 데이터를 출력할 경우

: th:text

  • 예) <span th:text="${data}">

    Controller의 model.addAttribute("data", "Hello Spring"); "data"가 "Hello Spring"으로 치환이 되어 반환된다.

✔ 2. HTML 컨텐츠 영역 안에서 직접 데이터를 출력 하고 싶은경우

: [[ ]]

  • 예 ) [[${data}]]

✔ 3. HTML 엔티티

  • 웹 브라우저 : Hello <b>Spring</b>
  • 소스 보기 : Hello &lt;b&gt;Spring$lt;/b&gt;

🐱‍🏍 "<" 태그를 문자로 표현할수있는 방법이 필요함으로, HTML에서 사용하는 특수문자를 HTML엔티티로 변경하는것을 이스케이프 (Escape)라 한다.

  • th:text, [[ ]]는 기본적으로 이스케이프를 제공한다.

그렇다면 Unescape는?

th:text ➡️ th:utext
[[ ]] ➡️ [( )]
와 같이 바꿔 사용하면 우리가 진짜 원하던 태그의 기능 (글씨 진하게)으로 사용할 수 있고 이것을 언이스케이프라고 한다.

✔ 4. 이스케이프 값을 사용하는 이유

  • 예시로 게시판을 사용자가 글을 작성할때 HTML 태그를 잘못 작성하여 적용이 되면 기능이 엉망이 될수있음.
  • 기본으로 이스케이프 값을 사용하고, 꼭 필요할 경우만 언이스케이프 사용

[3] 변수 - SpringEL

✔ 변수 표현식 : ${...}

  • 변수 표현식에는 스프링이 제공하는 스프링 EL이라는 표현식을 사용할수있다.

단순한 변수라면 ${data}로 바로 표현이 가능하지만, Object나, List, Map같은 컬렉션 객체는 다음과 같이 사용할 수 있다.

✔ Object

  • data.field: data에서 field 프로퍼티 접근 (data.getField())
  • data['field']: 위와 같다(data.getField())
  • data.getField(): data에서 getField()메서드를 직접 호출 할 수 있다.

✔ List

  • list[0].field: List에서 첫 번째 데이터를 찾아 field 프로퍼티 접근한다.
  • list[0]['field']: 위와 동일하다.
  • list[0].getField(): List에서 첫 번째 회원을 찾아 메서드를 직접 호출 할 수 있다.
  • list.get(0).xxx: List에서 get메서드를 통해 데이터를 찾아 프로퍼티 접근도 가능하다.

✔ Map

  • map['key'].field: Map에서 key를 찾아 field 프로퍼티에 접근한다.
    ⇒ map.get('key').getField()와 동일하다.
  • map['key']['field']: 위와 동일하다.
  • map['key'].getField(): Map에서 key를 찾아 직접 메서드를 호출해 value를 반환한다.

번외

: th:with 지역 변수를 사용해, 선언한 태그 안에서만 사용가능하다.

[4] 기본 객체들

${#request},${#response},${#session},@{#servletContext},${#locale}

HTTP get파라미터 접근 : ${param.paramData}
HTTP session 접근 : ${session.sessionData}
스프링 빈 접근 : ${@helloBean.hell("신재원")}

[5] 유틸리티 객체와 날짜

✔ 자바 8 이상에서는 LocalDateTime, LocalTime, 등 라이브러리가 자동으로 추가되어있음으로, 필요할 경우 메뉴얼 보고 사용한다.

0개의 댓글