Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[WebPage] PRG Post/Redirect/Get 본문

인프런/[인프런] 스프링 MVC 1

[WebPage] PRG Post/Redirect/Get

Seung__ 2021. 9. 17. 21:12

음...상품등록 처리를 위한 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


 

GitHub - bsh6463/MVC3

Contribute to bsh6463/MVC3 development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 스프링 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