Forward와 Redirect
웹에서 페이지를 요청할 때 "Forward"와 "Redirect" 2가지의 방식을 지원한다. 두 가지의 차이점을 알아보고자 한다 :)
Forward 방식
- 서버 내부에서 일어나는 호출 방식
- 응답을 위임하여 처리한다.
- Web Container 차원에서 페이지의 이동만 존재한다.
- 웹 브라우저에는 최초에 호출한 URL만 표시되고, 이동한 페이지의 URL 정보는 확인할 수 없다.
- 현재 실행 중인 페이지와 forward에 의해 호출된 페이지는 request와 response 객체를 공유한다.
이미지 출처 : https://blog.naver.com/saintw/100165339381
Spring에서 Forward 사용하기
@PostMapping ("forwardSeoul")
public String forwardSeoul(@RequestParam(required = false) String name, Model model) {
String forwardName = name;
model.addAttribute("name", forwardName);
return ("/seoul");
}
- 클라이언트에게서 입력받은 값은 model에 attribute로 추가해주기
- return("/
forward할 주소") 형식으로 작성
실무 활용 방식
- 시스템에 변화가 생기지 않는 단순 조회 요청의 작업에 사용된다.
예) 글 목록 보기, 검색 등
- 특정 URL에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용하거나 조회를 위해 사용된다.
Redirect 방식
- 클라이언트가 한 번 더 요청을 보내도록 하는 방식
- Web Container로 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라고 명령을 내린다.
- 페이지 자체를 이동하여 처리하는 방식이다.
- 웹 브라우저는 URL을 redirect된 주소로 변경한다.
- request, response 객체가 새롭게 생성된다. (공유되지 않는다.)
이미지 출처 : https://blog.naver.com/saintw/100165339381
Spring에서 Redirect 사용하기
@PostMapping("redirectBusan")
public String redirectBusan(@RequestParam(required = false) String name, RedirectAttributes rttr) {
String redirectName = name;
rttr.addFlashAttribute("name", redirectName);
return ("redirect:/busan");
}
- redirect를 사용하는데 객체 값을 담아서 전달하고 싶다면 "RedirectAttributes" 객체를 활용하기
- return("redirect:/
redirect할 주소") 형식으로 작성
실무 활용 방식
- 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용된다.
예) 회원가입 - 요청을 중복해서 보내는 것을 방지할 수 있다.