[Spring MVC] View Resolver
OldController - View 조회 가능으로 변경
@Component("/springmvc/old-controller")
public class OldController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return new ModelAndView("new-form");
}
}
View를 사용할 수 있도록 return new ModelAndView("new-form");
을 추가했다.
실행 후 오류가 발생하지 않으려면 다음 코드를 추가해야 한다.
application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
뷰 리졸버 - InternalResourceViewResolver
스프링 부트는 InternalResourceViewResolver
라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties
에 등록한 spring.mvc.view.prefix
, spring.mvc.view.suffix
설정 정보를 사용해서 등록한다.
ViewResolver 동작 방식
스프링 MVC 구조
스프링 부트가 자동 등록하는 ViewResolver
(일부 생략…)
1 = BeanNameViewResolver : 빈 이름으로 View를 찾아서 반환.
2 = InternalResourceViewResolver : JSP를 처리할 수 있는 View를 반환.
1. 핸들러 어댑터 호출
핸들러 어댑터를 통해 new-form
이라는 View 논리 이름을 획득.
2. ViewResolver 호출
new-form
이라는 View 이름으로 viewResolver를 순서대로 호출.BeanNameViewResolver
는new-form
이라는 이름의 스프링 빈으로 등록된 View를 찾아야 하지만 없다.InternalResourceViewResolver
가 호출.
3. InternalResourceViewResolver
InternalResourceView
반환.
4. View - InternalResourceView
InternalResourceView
는 JSP처럼 forward()
를 호출해서 처리할 수 있는 경우에 사용한다.
5. view.render()
view.render()
가 호출되고 InternalResourceView
는 forward()
를 사용해서 JSP를 실행한다.
InternalResourceViewResolver
는 만약 JSTL 라이브러리가 있으면InternalResourceView
를 상속받는JstlView
를 반환한다.
다른 View는 실제 View를 렌더링하지만, JSP의 경우
forward()
를 통해서 해당 JSP로 이동(실행)해야 렌더링이 된다. JSP를 제외한 나머지 뷰 템플릿들은forward()
과정 없이 바로 렌더링 된다.
Thymeleaf 뷰 템플릿을 사용하면
ThymeleafViewResolver
를 등록해야 하지만, 최근에는 라이브러리만 추가하면 스프링 부트가 모두 자동화해준다.
댓글남기기