My footsteps

타임리프 + Reflection + 스프링 본문

국비수업/수업정리

타임리프 + Reflection + 스프링

밀김 2023. 5. 30. 11:39
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

< 오전스터디 / 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);
		}

 

 

 

< 오전 타임리프 잠깐.. >

html에 저 한줄 추가해주면 문서 자체가 타임리프가 된다

 

 

타임리프에서 if문 쓰는 방법

 

 

 

 

 

th:each : 타임리프 반복문쓰는법

 

 

 

 

 

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

 

 

https://www.thymeleaf.org/

 

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 요소나 구조일 수 있습니다.




 

 

 

 

 

 

 

728x90

'국비수업 > 수업정리' 카테고리의 다른 글

스프링 / 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