Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AOP
- 김영한
- spring
- java
- SpringBoot
- transaction
- 스프링 핵심 기능
- jpa
- http
- Exception
- springdatajpa
- Proxy
- pointcut
- Spring Boot
- Android
- QueryDSL
- JDBC
- 스프링 핵심 원리
- 자바
- Greedy
- 그리디
- Thymeleaf
- db
- 인프런
- JPQL
- 스프링
- 백준
- Servlet
- kotlin
- 알고리즘
Archives
- Today
- Total
개발자되기 프로젝트
[WebPage] PRG Post/Redirect/Get 본문
음...상품등록 처리를 위한 Controller는 문제가 있음.
@PostMapping("/add")
public String addItemV4(Item item){
itemRepository.save(item);
return "basic/item";
}
- 현재는 save를 마치고 view만 내부 호출을 통해 변경이 된다.
1. 전체 흐름
2. POST 등록 후 새로고침
- 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송함
- 마지막 행위 + data 다시 보냄. -->여기서는 POST/add, 상품 data
- 상품 등록 폼에서 데이터를 입력하고 저장을 선택하면 POST /add + 상품 데이터를 서버로 전송한다.
- 이 상태에서 새로고침을 하면 마지막에 전송한 POST /add + 상품 데이터를 서버로 다시 전송!
- 그래서 ID만 다른 데이터가 계속 쌓임..
3. 해결 방법
- Redirect!!!!!!
- 상품 상세 쪽으로 Redirect를 해버린다면..? -> URL이 바뀜.
- 새로고침 해도 상품 상세를 조회하기 때문에 영향이 없음 ㅋㅋ
- 이러한 패턴을 PRG(Post, Redirect, Get)이라고 함.
- POST : 상품 등록
- REDIRECT : 상품 상세 URL
- GET : 해당 상품의 상세 조회
- 새로고침하면 GET 재요청하게됨.
- 즉 새로 고침 문제를 해결하려면 상품 저장 후에 뷰 템플릿으로 이동하는 것이 아니라,
- 상품 상세 화면으로 Redirect를 호출해주면 된다.
@PostMapping("/add")
public String addItemV5(Item item){
itemRepository.save(item);
return "redirect:/basic/items/" + item.getId();
}
- 주의
- redirect url지정할 때 item.getId()를 직접 더해줬다.
- id의 경우 Long타입이라 문제는 없겠지만...
- 인코딩을 해서 넣어줘야 한다.
- RedirectAttributes 사용이 필요.
4. GitHub : 210917 PRG
'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글
[WebPage] RedirectAttributes (0) | 2021.09.17 |
---|---|
[WebPage] 상품 수정 (0) | 2021.09.17 |
[WebPage] 상품등록 - @ModelAttribute (0) | 2021.09.17 |
[WebPage] 상품 등록 form (0) | 2021.09.17 |
[WebPage] 상품 상세 (0) | 2021.09.17 |
Comments