-
0907. Model 데이터 전달자, Redirect카테고리 없음 2023. 9. 8. 17:39
HomeController
모델 객체는 자동으로 넘어간다.
@ModelAttribute
https://web-obj.tistory.com/485
@GetMapping("/ex04") public String ex04( Model model, @ModelAttribute("sample")SampleDTO dto, @ModelAttribute("page") int page) { log.info("dto: " + dto); log.info("page: " + page); model.addAttribute("now", new Date()); return "ex04"; }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> SampleDTO: ${sample } <br> page: ${page } <br> now: ${now } </body> </html>
⭐RedirectAttributes
요청을 보냈을 때 "서버"가 다른 요청으로 다시 해달라고 다른 url을 주면
브라우저가 다른 url로 다시 요청 => 서버가 최종 응답을 내보냄.
예전엔 한국 도메인을 co.kr로 쓰다가 요즘엔 다 .com으로 사용. 아직까지 co.kr로 아는 사람이 많으니 자동으로 바꿔주도록 하는 것. 사용자 입장에서는 최종적으로 바뀐 것만 보이지 중간단계는 안 보인다.
[적용예시]
1. 옛날 url을 새로운 url로 운영할 때 페이지를 이동해 줌/ 응답코드:300 => 최종은 200번 응답 결과 url이 나옴
*200:ok, 400:클라이언트 잘못, 500: 서버 잘못, 300:redirect 지시
⭐2. 개발자가 POST 처리 후
1. 옛날 url을 새로운 url로 운영할 때
요청이 2번 되고 서버에 최종적으로 나온 형태인 것이다.
앞에서 나온 request scope는 사라지고 두 번째 나온 request scope만 유지된다.
⭐2. 개발자가 POST 처리 후
이 화면에서 새로고침하면 저렇게 뜨면서 같은 화면이 나온다.
이 상태에서 또 새로고침하면 에러가 뜬다.
같은 id가 중복되어서 들어가기 때문이다.
이럴 때 필요한 게 redirect이다.
// "redirect:이동할 url" return "redirect:/user/join_result"; } @GetMapping("/join_result") public String joinResult() { return "user/join_result"; }
위의 상태에서 새로고침하면
양식 다시 제출할지 물어보지 않고 계속 유지되고 정보출력은 못 한다.
새롭게 요청을 하니 request scope가 바뀌기 때문이다.
⭐그러므로 POST 처리에 성공했으면 반드시 redirect 해야한다.
// "redirect:이동할 url" return "redirect:/user/join_result";
=> insert, update, delete 하는 경우❗ 모두 필요
redirect 안 하는 케이스는 그냥 get 요청처리라서 디폴트니 포워드로 처리한다.
만약 redirect를 쓰면서 정보도 출력하고 싶다면
addFlashAttribute를 써서 넣어준다.