1. spring boot의 static 폴더와 templates 폴더의 차이
- templates
- static
- 보통 css, js를 둔다. 정적 페이지
- 정적 리소스에서 해당 파일을 탐색기를 통해 직접 열어도 동작하는 것을 확인할 수 있다.
2. @PostConstruct
- 객체의 초기화 부분
- 객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메소드를 선언한다.
- @PostConstruct 어노테이션을 설정해 놓은 init 메서드는 was가 띄워질 때 실행된다.
3. @PreDestroy
- 마지막 소멸 단계
- 스프링 컨테이너에서 객체(빈)를 제거 하기 전에 해야할 작업이 있다면 메소드 위에 사용하는 어노테이션.
4. th:action
- 같은 url로 전송 시, 전송 방법만 달라지는 경우는 url을 쓰지 않아도 된다.
- url이 같다는 것을 강조하기 위해 여기서는 쓰지 않는다.
<form action="item.html" th:action method="post">
5. @ModelAttribute
5-1. @ModelAttribute - 요청 파라미터를 처리
- @ModelAttribute는 Item 객체를 생성하고, 요청 파라미터의 값을 프로퍼티 접근법(set...) 으로 입력해준다.
5-2. @ModelAttribute - Model 추가
- @ModelAttribute는 중요한 한 가지 기능이 더 있는데, 바로 모델에 @ModelAttribute로 지정한 객체를 자동으로 넣어주는 기능이다.
- 주의
: @ModelAttribute("key") Item item
model.addAttribute("key", item);
5-3. @ModelAttribute - 이름 생략
- @ModelAttribute의 이름을 생략하면 모델에 저장될 때 클래스명을 사용한다. 이 때, 클래스의 첫 글자만 소문자로 변경해서 등록한다.
예) @ModelAttribute Item item -> 모델의 key의 이름 = item -> model.addAttribute("item",item);
6. forward, redirect
- 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송한다.
- 그래서 내용은 같고, ID만 다른 상품 데이터가 계속 쌓이게 된다.
7. RedirectAttributes
- redirect 시 사용되는 여러 속성들을 알아보자.
- RedirectAttributes를 사용하면 URL 인코딩, pathVariable, 쿼리 파라미터까지 처리해준다.
@PostMapping("/add")
public String saveV7(Item item, RedirectAttributes redirectAttributes) {
Item savedItem = itemRepository.save(item);
redirectAttributes.addAttribute("itemId",savedItem.getId());
redirectAttributes.addAttribute("status","true");
return "redirect:/basic/items/{itemId}";
}
- redirect:/basic/items/{itemId}
-> pathVariable 바인딩 : {itemId}
-> 나머지는 쿼리 파라미터로 처리
: ?status=true