View Resolver
- 헨들러 메소드가 요청을 처리하고 논리 뷰 이름을 반환하면 DispatcherServlet은 화면에서 데이터를 표시하도록 뷰 템플릿에 제어권을 넘긴다.
- Spring MVC에서 다양한 전략에 맞게 View를 해석할 수 있는 ViewResolver 구현체 몇가지가 있는데 그 중 MVC기본 설정에는 템플릿 명과 위치에 따른 View를 해석하는 InternalResourceViewResolvert를 기본으로 사용하고 있다.
- prefit/suffix 를 이용해 View 이름을 특정 애플리케이션 디렉토리에 대응시킨다.
- InternalResourceViewRselver는 사용이 간단해서 좋기는 하지만 RequestDispatcher가 forward 할 수 있는 내부 리소스(jsp 또는 Servlet)만 해석이 가능하기 때문에 다른 뷰 템플릿을 사용하는 경우에는 다른 viewResolvert를 사용해야 한다.
<aside>
💡 **Model과 HttpServletRequest의 차이점
HttpServletRequest에 담긴 값은 Redirect 시 전환된 화면에서 활용할 수 없다
→ redirect는 request 객체를 유지하지 않고 새로 만듬
반면, Model은 Redirect 시에는 전환된 화면에 parameter로 담긴 값을 전송하고
forward 시에는 requestScope로 담긴 값을 전송한다.**
</aside>
Model 객체를 사용한 Redirect
- Model객체를 사용하여 redirect를 할 때 어떤 값을 유지 시키면서 redirect를 하고 싶을 때 사용
- forward 시에는 requestScope로 동일하게 값을 전송함
- Model에 담은 값을 파라미터(param)로 전달 된다.
- 파라미터라는 것은 URL 경로 상에서 값이 전달된다는 것이고 이럴 경우 한글을 사용하는 경우 인코딩, 디코딩 처리를 필터와 별개로 따로 해주어야 한다.
- 예시 코드
RedirectAttributes를 활용한 Redirect
- 기존의 Redirect시 한번의 요청과 응답이 종료되면 사라지는 request 요청처럼 Redirect 시 URL에 노출되지 않는 정보를 flash 영역에 한번만 request에 담아서 redirect 할 수 있다.
- 이 때는 Model 객체가 아닌 RedirectAttributes를 사용
- 전달된 값을 꺼낼 때는 requestScope 에서 꺼낼 수 있음
- 내부적으로 세션에 임시로 값을 담고 소멸시키는 과정이 있으므로 session에 동일한 키 값이 존재하지 않아야 한다.
- 예시 코드