1 분 소요


기본 객체들

  • ${#request}
  • ${#response}
  • ${#session}
  • ${#servletContext}
  • ${#locale}

${#request}HttpServletRequest 객체가 그대로 제공되기 때문에 데이터를 조회하려면 request.getParameter("data")와 같이 접근해야 한다.

편의 객체

  • HTTP 요청 파라미터 접근 : param
    • Ex) ${param.paramData}
  • HTTP 세션 접근 : session
    • Ex) ${session.sessionData}
  • 스프링 빈 접근 : @
    • Ex) ${@helloBean.hello('Spring!')}

BasicController

@GetMapping("/basic-objects")
public String basicObjects(HttpSession session) {
    session.setAttribute("sessionData", "Hello Session");
    return "basic/basic-objects";
}

@Component("helloBean")
static class HelloBean {
    public String hello(String data) {
        return "Hello " + data;
    }
}

// 추가적으로 넘어갈때 URL에 paramData값이 같이 넘어감

/resources/templates/basic/basic-objects.html

<!-- 편의 객체 -->
<li>Request Parameter = <span th:text="${param.paramData}"></span></li>
<li>session = <span th:text="${session.sessionData}"></span></li>
<li>spring bean = <span th:text="${@helloBean.hello('Spring!')}"></span></li>


유틸리티 객체와 날짜

  • #message : 메시지, 국제화 처리
  • #uris : URI 이스케이프 지원
  • #dates : java.util.Date 서식 지원
  • #calendars : java.util.Calendar 서식 지원
  • #temporals : 자바8 날짜 서식 지원
  • #numbers : 숫자 서식 지원
  • #strings : 문자 관련 편의 기능
  • #objects : 객체 관련 기능 제공
  • #bools : boolean 관련 기능 제공
  • #arrays : 배열 관련 기능 제공
  • #lists, #sets, #maps : 컬렉션 관련 기능 제공
  • #ids : 아이디 처리 관련 기능 제공, 뒤에서 설명

참고
타임리프 유틸리티 객체
대략 알아두고, 필요할 때 찾아서 사용!

자바8 날짜

타임리프에서 자바8 날짜인 LocalDate, LocalDateTime, Instant를 사용하려면 추가 라이브러리가 필요하다.
스프링 부트 타임리프를 사용하면 해당 라이브러리가 자동으로 추가되고, 통합된다.

타임리프 자바8 날짜 지원 라이브러리
thymeleaf-extras-java8time

자바8 날짜용 유틸리티 객체
#temporals

BasicController

@GetMapping("/date")
public String date(Model model) {
    model.addAttribute("localDateTime", LocalDateTime.now());
    return "basic/date";
}

/resources/templates/basic/date.html

<!-- LocalDateTime -->
<li>default = <span th:text="${localDateTime}"></span></li>
    <li>yyyy-MM-dd HH:mm:ss = 
        <span th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm:ss')}">
    </span></li>

<!-- LocalDateTime - Utils -->
<li>${#temporals.day(localDateTime)} = 
    <span th:text="${#temporals.day(localDateTime)}"></span></li>
<li>${#temporals.month(localDateTime)} = 
    <span th:text="${#temporals.month(localDateTime)}"></span></li>
    <!-- 이하 생략... -->


URL 링크

URL을 생성할 때는 @{...} 문법을 사용하면 된다.

BasicController

@GetMapping("/link")
public String link(Model model) {
    model.addAttribute("param1", "data1");
    model.addAttribute("param2", "data2");
    return "basic/link";
}

<li><a th:href="@{/hello}">basic url</a></li>
<li><a th:href="@{/hello(param1=${param1}, param2=${param2})}">
    hello query param</a></li>
<li><a th:href="@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}">
    path variable</a></li>
<li><a th:href="@{/hello/{param1}(param1=${param1}, param2=${param2})}">
    path variable + query parameter</a></li>

단순한 URL

  • @{/hello} -> /hello

쿼리 파라미터

  • @{/hello(param1=${param1}, param2=${param2})}
    • -> /hello?param1=data1&param2=data2
    • ()에 있는 부분은 쿼리 파라미터로 처리.

경로 변수

  • @{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}
    • -> /hello/data1/data2
    • URL 경로상에 변수가 있으면 ()부분은 경로 변수로 처리된다.

경로 변수 + 쿼리 파라미터

  • @{/hello/{param1}(param1=${param1}, param2=${param2})}
    • -> /hello/data1?param2=data2

참고
/hello: 절대경로
hello: 상대경로


<출처 : 인프런 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술(김영한)>

댓글남기기