My footsteps
타임리프 + Reflection + 스프링 본문
< 오전스터디 / SPLIT연습 >
String a = "music:40,art:80";
String[] line = a.split(", | :");
for(String b : line) {
System.out.println("스플릿 : "+b);
}
System.out.println("------------------");
String b = "hello-jitto-@google.com";
String[] line2 = b.split("-|@|\\.");
for(int i=0; i<line2.length; i++) {
System.out.println(line2[i]);
}
String c = "동해물과 백두산이\n마르고 닳도록";
String[] line3 = c.split("\\n");
for(String f : line3) {
System.out.println("애국가 : "+f);
}
< 오전 타임리프 잠깐.. >
- <pending> : 결과를 모를때
첫 오후 수업..두근..!
< Reflection >
- 어노테이션 : 주석
- 리플렉션 : 돋보기
@Column("wirter-Id");
//필드에다가 주석달기. 괄호안에가 주석 명칭
//파일안에서 "wirter-Id" 이런 이름을 갖고 있는 애들을 담으면돼~이런 느낌
- 이 주석은 막쓰면 안되고 정의하고 써야한다(어노테이션 정의)
@Target(ElementType.FIELD)
//자바 어노테이션(annotation)을 정의할 때 사용되는 메타어노테이션(meta-annotation)입니다.
//메타어노테이션은 다른 어노테이션을 정의하는 데 사용되며,
//어노테이션의 사용 대상을 지정하는 데 도움을 줍니다.
//해당 어노테이션이 필드(field)에 적용될 수 있음을 나타냅니다.
//필드는 클래스의 멤버 변수를 말하며,
//주로 클래스의 상태를 저장하는 데 사용됩니다.
//이 어노테이션을 사용하면 해당 어노테이션이 필드에만
//적용될 수 있도록 제한할 수 있습니다.
- 한마디로 어노테이션을 만들기 위해 쓰는 어노테이션이다
@Retention(RetentionPolicy.RUNTIME)
- 이 어노테이션은 실행이 끝나면 사라지는 주석이다. 런타임 될때만 실행되는...
@Ignore(tocsv=true,toobj=false)
//csv로 보낼때 이 속성은 가져가지마! 할때 붙이는 주석
Column col = field.getAnnotation(Column.class);
< Spring >
Thymeleaf
Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8. Write Thymeleaf in your favourite tools, using your favourite web-development framework. Check out our Ecosystem to see more integrati
www.thymeleaf.org
<span th:text="#{greeting}">Hello Spring page</span>
//th:text="#{greeting}" : 대체속성텍스트 개발자들만 보는..오른쪽은 퍼블리셔들이 보는거고!
@Controller
public class HomeController {
//mvc 중에서 m
@RequestMapping("/index")
public String index(Model model) {
//스프링이 호출하면서 모델에게 참조를 줘서 null이 안나오게함
model.addAttribute("greeting","Hello Spring page");
return "index";
}
}
<!DOCTYPE html>
<html xmlns:th ="http://www.thymeleaf.org">
<body>
<span th:text="${greeting}">Hello Spring Project</span>
</body>
</html>
@RequestMapping("/menu/list")
public String menuList() {
return "menu/list";
}
//이렇게하면 프론트 컨트롤러가 저 주소를 찾음
- a링크에 달린 .html 이제는 다 빼줘야함
- 상위폴더가 컨트롤러의 기본 단위다
- 홈컨트롤러에 다 때려박으면 안되니까 메뉴는 메뉴클래스 만들어서,홈은 홈대로 이렇게 따로 관리한다
//menu class 따로 만들었음!!!
package kr.co.rland.web.controller;
import org.springframework.web.bind.annotation.RequestMapping;
public class MenuController {
@RequestMapping("/menu/list")
public String menuList() {
return "menu/list";
}
//이렇게하면 프론트 컨트롤러가 저 주소를 찾음
@RequestMapping("/menu/detail")
public String menuDetail() {
return "menu/detail";
}
}
- 공통되는 menu를 매핑으로 상단에 빼주어서 나머지 불필요하게 menu 중복으로 붙였던건 삭제해준다.
마치 메뉴 폴더 안에 리스트..이렇게 계단식 폴더 구조처럼!!
@Controller
@RequestMapping("menu")
public class MenuController {
@RequestMapping("list")
public String menuList() {
return "menu/list";
}
@RequestMapping("detail")
public String menuDetail() {
return "menu/detail";
}
- 기본적인 요청은 다 get 요청이다. 이렇게 get요청만 가능하게 제한할수도 있다
@GetMapping("list")//->get/post 요청을 겸비
public String menuList() {
return "menu/list";
}
@GetMapping("detail")
public String menuDetail() {
return "menu/detail";
}
- header html을 따로 파일 빼놓고,index html에
<!--헤더부분-->
<div th:replace="inc/header"></div>
이렇게 한줄만 추가해주면됨!! 나름의 html...구조화 랄까...???
1. `th:replace`:
- `th:replace`는 해당 요소를 다른 템플릿으로 대체합니다.
- 대체할 템플릿은 `th:replace` 속성 값으로 지정되며, 해당 템플릿의 내용이 현재 요소로 대체됩니다.
- 대체될 템플릿은 완전한 HTML 문서 구조를 가지고 있어야 합니다.
- 예시: `<div th:replace="inc/header"></div>`은 `inc/header`라는 템플릿을 찾아서 `<div>` 요소로 대체합니다.
2. `th:insert`:
- `th:insert`는 해당 요소 안에 다른 템플릿을 삽입합니다.
- 삽입할 템플릿은 `th:insert` 속성 값으로 지정되며, 해당 템플릿의 내용이 현재 요소의 내부에 삽입됩니다.
- 삽입될 템플릿은 부분적인 HTML 요소나 구조일 수 있습니다.
- 예시: `<div th:insert="inc/footer :: copyright"></div>`은 `inc/footer`라는 템플릿에서 `copyright`이라는 fragment를 찾아 `<div>` 요소 안에 삽입합니다.
차이점:
- `th:replace`는 요소를 완전히 대체하고, 대체할 템플릿은 완전한 HTML 문서 구조를 가져야 합니다.
- `th:insert`는 요소 안에 템플릿을 삽입하고, 삽입할 템플릿은 부분적인 HTML 요소나 구조일 수 있습니다.
'국비수업 > 수업정리' 카테고리의 다른 글
스프링 / 3 (0) | 2023.06.01 |
---|---|
스프링 / 2 + MyBatis (0) | 2023.05.31 |
CSV (0) | 2023.05.26 |
Maven (0) | 2023.05.25 |
JSP / 3 + JSTL (0) | 2023.05.24 |