복습하는 방법
이거 한분 가볍게 슥 읽고, 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연산
3-5. 비교와 동등
- 비교 : >, <, >=, <=(gt, lt, ge, le)
- 동등 : ==, !=(eq, ne)
3-7. 조건 연산
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={param2})}
() 안에 있는 부분은 쿼리 파라미터로 처리된다.
/hello?param1=data1¶m2=data2
- 경로 변수 : @{/hello/{param1}/{param2}(param1=param1,param2={param2})}
URL 경로 상에 변수가 있으면 ()부분은 경로 변수로 처리된다. 괄호 열어서 변수들 맵핑해줘야한다.
/hello/data1/data2
- 경로 변수 + 쿼리 파라미터
@{/hello/{param1(param1=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가 조회되지 않는다.