본문 바로가기
Spring/Spring Boot & Thymeleaf

[Spring Boot & Thymeleaf] 4. 기본 객체들

by Kloong 2022. 9. 5.

참고

더보기

Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.

 

GitHub - Kloong1/TIL: Today I Learned.

Today I Learned. Contribute to Kloong1/TIL development by creating an account on GitHub.

github.com

타임리프 - 기본 객체들

타임리프는 다음과 같은 기본 객체를 제공한다.

  • ${#request}
    • HttpServletRequest 객체
  • ${#response}
    • HttpServletResponse 객체
  • ${#session}
    • Session 객체
  • ${#servletContext}
    • ServletContext 객체
  • ${#locale}
    • Locale 객체
BasicController.java 내용 추가
package kloong.thymeleaf.basic;

import ... //생략

@Controller
@RequestMapping("/basic")
public class 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;
        }
    }
}
  • HttpSession 객체에 데이터를 추가했다.
  • helloBean 이라는 이름을 가진 Spring bean을 컴포넌트 스캔 방식으로 등록했다.
/resources/templates/basic/basic-objects.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>식 기본 객체 (Expression Basic Objects)</h1>
<ul>
    <li>request = <span th:text="${#request}"></span></li>
    <li>response = <span th:text="${#response}"></span></li>
    <li>session = <span th:text="${#session}"></span></li>
    <li>servletContext = <span th:text="${#servletContext}"></span></li>
    <li>locale = <span th:text="${#locale}"></span></li>
</ul>
<h1>편의 객체</h1>
<ul>
    <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>
</ul>
</body>
</html>

Expression Basic Objects

  • 타임리프에서 지원하는 Expression Basic Objects를 사용하면, 다음 객체들을 컨트롤러에서 따로 Model 에 추가해서 넘겨주지 않아도 접근이 가능하다. 자주 사용하는 객체들이기 때문에 타임리프에서 기본 객체로 지원한다.
    • ${#request}: HttpServletRequest 객체
    • ${#response}: HttpServletResponse 객체
    • ${#session}: Session 객체
    • ${#servletContext}: ServletContext 객체
    • ${#locale}: Locale 객체

편의 객체

  • ${param}
    • 요청 파라미터를 컨트롤러에서 받아서 Model에 따로 추가해주지 않아도, 이 객체를 이용하면 요청 파라미터에 직접 접근할 수 있다.
  • ${session}
    • HttpSession 객체에 접근할 수 있다.
    • ${#session} 과 다른 객체임에 유의하자.
  • ${@스프링 빈 이름.메소드()}
    • Spring bean 이름을 통해 빈에 직접 접근이 가능하다.
    • 빈의 메소드도 직접 호출할 수 있다.

댓글