기본 객체들

shinyeongwoon·2022년 12월 30일
0

tymeleaf

목록 보기
4/24

타임리프 기본 객체

${#request} - 스프링 부트 3.0부터 제공하지 않는다.
${#response} - 스프링 부트 3.0부터 제공하지 않는다.
${#session} - 스프링 부트 3.0부터 제공하지 않는다.
${#servletContext} - 스프링 부트 3.0부터 제공하지 않는다.
${#locale}

📍 주의! - 스프링 부트 3.0
스프링 부트 3.0 부터는 ${#request} , ${#response} , ${#session} , ${#servletContext} 를 지원하지 않는다. 만약 사용하게 되면 다음과 같은 오류가 발생한다

Caused by: java.lang.IllegalArgumentException: The 'request','session','servletContext' and 'response' expression utility objects
  are no longer available by default for template expressions and their use is
  not recommended. In cases where they are really needed, they should be manually
  added as context variables.

스프링 부트 3.0이라면 직접 model 에 해당 객체를 추가해서 사용해야 한다.
메뉴얼 하단에 스프링 부트 3.0에서 사용할 수 있는 예시를 적어두었다.

그런데 #requestHttpServletRequest 객체가 그대로 제공되기 때문에 데이터를 조회하려면 request.getParameter("data") 처럼 불편하게 접근해야 한다.

이런 점을 해결하기 위해 편의 객체도 제공한다.
HTTP 요청 파라미터 접근: param

  • 예) ${param.paramData}
    HTTP 세션 접근: session
  • 예) ${session.sessionData}
    스프링 빈 접근: @
  • 예) ${@helloBean.hello('Spring!')}

스프링 부트 3.0 미만이라면 다음과 같이 작성

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;
} }

/resources/template/basic/basic-object.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>
  

실행 : http://localhost:8080/basic/basic-objects?paramData=HelloParam

스프링 부트 3.0 이상이라면 다음과 같이 작성

BasicController 추가

@GetMapping("/basic-objects")
  public String basicObjects(Model model, HttpServletRequest request,
  HttpServletResponse response, HttpSession session) {
      session.setAttribute("sessionData", "Hello Session");
      model.addAttribute("request", request);
      model.addAttribute("response", response);
      model.addAttribute("servletContext", request.getServletContext());
      return "basic/basic-objects";
}
  @Component("helloBean")
  static class HelloBean {
      public String hello(String data) {
          return "Hello " + data;
} }

/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>

실행 : http://localhost:8080/basic/basic-objects?paramData=HelloParam

0개의 댓글