redirect의 처리 과정
1.
요청
•
클라이언트에서 수동으로
•
/ch2/wirte.jsp
2.
응답
•
응답 헤더
◦
HTTP/1.1 302
Location: /ch2/login.jsp
Content-Language: ko-KR
Content-Length: 0 date: Thu, 22 Dec 2021 14:34:12 GMT
◦
300번대의 상태코드는 redirect를 의미
3.
요청
•
무조건 GET 방식의 자동 요청
•
/ch2/login.jsp
4.
응답
•
login.jsp
forward의 처리 과정
1.
요청
•
/ch2/wirte.jsp
2.
전달
•
받은 요청을 그대로 응답과 함께 전달
3.
응답
•
login.jsp
RedirectView
1.
요청
•
/ch2/register/save
2.
요청을 처리하기 위한 메소드 호출
DispatcherServlet이 Controller의 메소드 호출
3.
메소드를 통해 반환된 문자열 전달
•
redirect가 들어있으면 DispatcherServlet으니 RedirectView로 전달
◦
redirect:/register/add
4.
RedirectView는 응답헤더를 만들어 응답
JstlView
1.
요청
•
/ch2/register/add
2.
요청을 처리하기 위한 메소드 호출
DispatcherServlet이 Controller의 메소드 호출
3.
메소드를 통해 반환된 문자열로 view 이름해석
•
InternalResourceViewResolver가 해석하고 JstlView로 전달
servlet-context.xml
◦
registerForm → /WEB_INF/views/registerForm.jsp
4.
응답
•
JstlView는 해당 JSP에 모델에 데이터를 넣어 전달하고 JSP에서 최종 응답
InternalResourceView
1.
요청
•
/ch2/register/save
2.
요청을 처리하기 위한 메소드 호출
DispatcherServlet이 Controller의 메소드 호출
3.
메소드를 통해 반환된 문자열 전달
•
forward가 들어있으면 DispatcherServlet은 InternalResourceView로 전달
◦
forward:/register/add
포워딩된 곳에서 요청 처리
4.
메소드를 통해 반환된 문자열로 view 이름해석
•
InternalResourceViewResolver가 해석하고 JstlView로 전달
◦
registerForm → /WEB_INF/views/registerForm.jsp
5.
응답
•
JstlView는 해당 JSP에 모델에 데이터를 넣어 전달하고 JSP에서 최종 응답
forward의 예시
@RequestMapping("/download")
public String download(HttpServletRequest request,
@RequestParam(Required=false, defaultValue="") String type) {
List<User> userList = getUserList();
request.setAttribute("data", userList); // request에 저장하면, forward된 곳에서 사용가능
if(type.equals("pdf")) {
return "forward:/pdfView";
} else if(type.equals("csv")) {
return "forward:/csvView";
}
return "forward:/txtView";
}
Java