redirect 명령이 들어오면 3xx 응답코드를 가진 응답헤더를 반환해 브라우저에게 해당 location으로 이동하라는 응답을 보낸다
->브라우저에서 해당 URL로 이동 (requesetMethod는 GET)
서버 내부에서 request를 해당하는 location으로 직접 전달하고 해당 location에서 처리 후 응답을 클라이언트에게 보낸다
controller(URL1)가 처리하고 정보를 model(request)에 담아서 view(URL2)에 보냄
URL의 변화 여부 | 객체의 재사용여부 | |
---|---|---|
redirect | O | X |
forward | X | O |
요청이 들어왔을때 controller의 반환값이 view의 이름이면 DispatcherServlet이 InternalResourceViewResolver에 전달
->InternalResourceViewResolver에서 prefix와 suffix를 반환해 DispatcherServlet이 JstlView로 전달
->JstlView에서 Model을 해당 View에 전달
<!-- webapp/WEB-INF/spring/appServlet/servlet-context.xml -->
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
요청이 들어왔을때 controller의 반환값이 redirect:/... 이면 DispatcherServlet이 RedirectView에 전달
->RedirectView에서 302 응답코드의 헤더를 반환하고 브라우저에서 해당 URL로 이동
요청이 들어왔을때 controller의 반환값이 forward:/... 이면 DispatcherServlet이 InternalResourceView에 전달
->InternalResourceView에서 앞에 forward를 제외한 경로를 호출하고 DispatcherServlet에 알림 (내부에서 페이지 이동을 처리!!)
->이후는 일반 JstlView와 비슷하게 처리