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는 주소변경 없음
'Spring' 카테고리의 다른 글
27. 쿠키(cookie) - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.09 |
---|---|
26. jsp별찍기 - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.09 |
24. @GetMapping, @PostMapping (2) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.09 |
23. @GetMapping, @PostMapping (1) - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.07 |
22. 회원가입 화면 작성하기 - 패스트캠퍼스 백엔드 부트캠프 3기 (4) | 2025.02.06 |