Spring
25. redirect와 forward - 패스트캠퍼스 백엔드 부트캠프 3기
gkss2tpt
2025. 2. 9. 14:41
1. redirect와 forward의 처리 과정 비교
- redirect
- 클라이언트 (수동)요청(GET, POST) -> 서버 응답 -> 자동 요청(GET방식) -> 서버 응답
- forward
- 클라이언트 요청 -> 전달 -> 서버 응답
- RedirectView(응답 헤더)
- 클라이언트 요청 -> DispatcherServlet -> Controller
- JstlView
- 클라이언트 요청 -> DispatcherServlet -> Controller -> DispatchServlet -> JstlView -> 서버 응답
- InternalResourceView(forward)
- 클라이언트 요청 -> DispatcherServlet -> Controller -> DispatcherServlet -> InternalResourceView -> DispatcherServlet -> JstlView -> 서버 응답
- forward의 예시
@RequestMapping("/download")
public String download(HttpServletRequest request,
@RequestParam(required=false, defaultValue="") String type) {
List<User> userList = getUserList();
request.setAttribut("data", userList); // request에 저장하면, forward된 곳에서 사용가능
if(type.equals("pdf")) {
return "forward:/pdfView";
} else if(type.equals("csv")) {
return "forward:/csvView";
}
return "forward:/txtView";
}
- redirect
@PostMapping("/register/save") // 4.3부터
public String save(User user, Model m) throws Exception{
// 1. 유효성 검사
if(!isValid(user)) {
String msg = URLEncoder.encode("id를 잘못입력하셨습니다.","UTF-8") ;
m.addAttribute("msg", msg);
return "redirect:/register/add";
// return "redirect:/register/add?msg="+msg; // URL재작성(rewriting)
}
// 2. DB에 신규회원 정보를 저장
return "registerInfo";
}
private boolean isValid(User user) {
return false;
}
- HTTP/1. 1 302 -> 300번대 redirect요청
- save -> 수동 요청, add?msg... -> 자동요청
- redirect -> forward변경
@GetMapping("/register/add")
public String register(){
return "registerForm"; // WEB-INF/views/registerForm.jsp
}
// POST 방식으로만 받는다. 아래와 같은 뜻
// @RequestMapping(value="/register/save", method=RequestMethod.POST)
@PostMapping("/register/save") // 4.3부터
public String save(User user, Model m) throws Exception{
// 1. 유효성 검사
if(!isValid(user)) {
String msg = URLEncoder.encode("id를 잘못입력하셨습니다.","UTF-8") ;
m.addAttribute("msg", msg);
return "forward:/register/add";
// return "redirect:/register/add?msg="+msg; // URL재작성(rewriting)
}
// 2. DB에 신규회원 정보를 저장
return "registerInfo";
}
- /register/save 에서 /register/add로 forward를 하려하는데 POST와 GET형식이 안맞아서 오류가 발생
@RequestMapping(value="/register/add", method={RequestMethod.GET,RequestMethod.POST})
public String register(){
return "registerForm"; // WEB-INF/views/registerForm.jsp
}
- forward는 주소변경 없음