core3 프로젝트로 thymeleaf 배우기

전영덕·2023년 4월 29일
0

Springboot

목록 보기
4/13

복습하는 방법

이거 한분 가볍게 슥 읽고, core3프로젝트 서버 켜고 index.html 과 BasicController.java에서 각 html켜가면서 보기

[잡담] domain : 웹페이지의 업무 단위. 너는 어떤 도메인을 해? = 너는 어떤 업무를 해?

  • core3 프로젝트 만들기
    application.properties파일에서 #port 수정, #한글, #thyme 설정해준다.
    domain.web.basic 패키지 만들고 requestParamController.java만든다.

1. HTTP 요청 파라미터 - @RequestParam

  • 스프링이 제공하는 @RequestParam을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다.

  • static에다가 hello-form.html만들고 컨트롤러 패키지에는 HelloData.java만듦

  • 롬복이라는 라이브러리를 사용할 것이다.
    implementation 'org.projectlombok:lombok'
    라는 것을 gradle에다가 추가해준다. 추가해줬으면 gradle - Refresh Gradle Project
    롬복은 롬복 자르파일을 한번 실행해 줘야한다.
    근데..실행이.. 안되네?
    강사님이 확인하고 다시 알려줄 것임

ResponsiveViewController를 만들었다.

여기에서도 이것저것 넣고~ 마무리한다.

index.html 로 와서 타임리프에 대해 본격적으로 배워보자

2. 타임리프

2-1. 서버사이드 HTML 렌더링

  • 타임리프는 백엔드 서버에서 (JSP처럼)HTML을 동적으로 렌더링 하는 용도로 사용된다.

2-2. 네추럴 템플릿

  • 타임리프는 순수 HTML을 최대한 유지하는 특징이 있다.
  • 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹브라우저에서 파일을 직접 열어도 내용을 확인할 수 있다.
    서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다.

2-3. 스프링 통합 지원

  • 타임리프틑 스프링과 자연스럽게 통합되고, 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다.

3. 기본표현식

3-1. 간단한 표현

  • 변수 표현식 : ${...}
  • 선택 변수 표현식 : *{...}
  • 메시지 표현식 : #{...}
  • 링크 URL 표현식 : @{...}
  • 조각 표현식 : ~{...}

3-2. 리터럴

  • 텍스트 : 'one text', ...
  • 숫자 : 0,34,3.0
  • boolean : true, false
  • null : null

3-3. 문자 연산

  • 문자 합치기 : +
  • 리터럴 대체 : | The Name is ${name}| // | : 달러표시

3-4. 산술 연산

  • +,-,*,/,%

3-5. boolean연산

  • and, or, !, not

3-5. 비교와 동등

  • 비교 : >, <, >=, <=(gt, lt, ge, le)
  • 동등 : ==, !=(eq, ne)

3-7. 조건 연산

  • if-then
  • if-then-else

com.codingbox.core3.thymeleaf.basic패키지만들고
BasicController.java

4. 타임리프에서 제공하는 기본 객체들

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

이거 하고선 갑자기 thymeleaf.bean에
HelloBean.java만듦

basic-objects.html에서 꺼내오기

어제의 core3에 이어서 날짜에 대한것을 추가했다 index.html 과 basic front controller에 localDateTime을 추가했다.

그다음 link에 대한것 th : text가 아니라 th : href이다.

5. URL

  • 단순한 URL : @{/hello} /hello
  • 쿼리 파라미터 : @{/hello(param1=param1,param2={param1},param2={param2})}
    () 안에 있는 부분은 쿼리 파라미터로 처리된다.
    /hello?param1=data1¶m2=data2
  • 경로 변수 : @{/hello/{param1}/{param2}(param1=param1,param2={param1},param2={param2})}
    URL 경로 상에 변수가 있으면 ()부분은 경로 변수로 처리된다. 괄호 열어서 변수들 맵핑해줘야한다.
    /hello/data1/data2
  • 경로 변수 + 쿼리 파라미터
    @{/hello/{param1(param1=param1,param2={param1},param2={param2})}
    경로 변수와 쿼리 파라미터를 함께 사용할 수 있다.
    /hello/data1?param2=data2

6. 리터럴(Literals)

  • 리터럴은 소스 코드 상에 고정된 값을 말하는 용어
    예륻 들어 "Hello" 는 문자 리터럴이고 10, 20은 숫자 리터럴이다.

  • 타임리프의 리터럴
    문자 : 'hello'
    숫자 : 10
    불린 : true, false
    null : null

  • 타임리프에서는 문자 리터럴을 항상 ' (작은 따옴표)로 감싸야한다.

  • 문자를 항상 '(작은따옴표)로 감싸는 것은 매우 너무 정말 리얼 핵 귀찮기 때문에 공백없이 쭉 이어진다면
    하나의 의미있는 토큰으로 인지해서 다음과 같이 작은 따옴표를 생략 가능하다.

  • 문자 리터럴은 원칙상 ' 로 감싸야한다. 중간에 공백이 있어서 하나의 의미있는 토큰으로도 인식되지 않는다. 그러므로 위 코드는 오류가 발생한다.
  • 이렇게 ' 로 감싸면 정상 동작을 한다.

operation.html파일은 그냥 받자 그냥 노가다 쓰기이다.

7. 속성 설정

  • th: 속성을 지정하면 타임리프는 기존 속성을 th:로 지정한 속성으로 대체한다.
    기존 속성이 없다면 새로 만든다.

  • th:attrappend : 속성 값이 뒤에 값을 추가

  • th:attrprepend : 속성 값의 앞에 값을 추가

  • th:classappend : class속성에 자연스럽게 (뒤에) 추가

8. 반복 상태 유지

<tr: th:each="user,userStat : ${users}">

  • 반복문에서 두번째 파라미터를 설정해 반복의 상태를 확인할 수 있다.
  • 두 번째 파라미터는 생략가능한데, 생략하면 지정한 변수명(user) + Stat가 된다.

9. 조건부 평가 (if문, condition)

  • 타임리프의 조건식
  • if, unless(if의 반대)
  • if, unless : 타임리프는 해당 조건이 맞지 않으면 태그 자체를 렌더링 하지 않는다.
  • switch : 조건을 만족하지 않으면 해당 tag가 조회되지 않는다.

0개의 댓글