Search

redirect & forward

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.
요청을 처리하기 위한 메소드 호출
DispatcherServletController의 메소드 호출
3.
메소드를 통해 반환된 문자열 전달
redirect가 들어있으면 DispatcherServlet으니 RedirectView로 전달
redirect:/register/add
4.
RedirectView는 응답헤더를 만들어 응답

JstlView

1.
요청
/ch2/register/add
2.
요청을 처리하기 위한 메소드 호출
DispatcherServletController의 메소드 호출
3.
메소드를 통해 반환된 문자열로 view 이름해석
InternalResourceViewResolver가 해석하고 JstlView로 전달
servlet-context.xml
registerForm/WEB_INF/views/registerForm.jsp
4.
응답
JstlView는 해당 JSP에 모델에 데이터를 넣어 전달하고 JSP에서 최종 응답

InternalResourceView

1.
요청
/ch2/register/save
2.
요청을 처리하기 위한 메소드 호출
DispatcherServletController의 메소드 호출
3.
메소드를 통해 반환된 문자열 전달
forward가 들어있으면 DispatcherServletInternalResourceView로 전달
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