쌓고 쌓다

뷰 리졸버 동작 본문

프로그래밍/spring

뷰 리졸버 동작

승민아 2023. 8. 7. 13:54

OldController

@Component("/springmvc/old-controller")
public class OldController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("OldController.handleRequest");
        return new ModelAndView("new-form"); // 추가된 부분
    }
}

기존의 핸들러에 뷰를 사용할 수 있도록 new ModelAndView("new-form")를 반환해준다.

 

application.properties

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

스프링 부트가 자동 등록하는 뷰 리졸버

  1. BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다.
  2. InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환한다.

 

 

뷰 리졸버 동작 과정

출처: 인프런 - 김영한

1. 핸들러 어댑터 호출

핸들러 어댑터를 통하여 "new-form"이라는 논리 뷰 이름을 갖는다.

// Example. 직접 만든 MVC
MyHandlerAdapter adapter = getHandlerAdapter(handler);
ModelView mv = adapter.handle(request, response, handler);
String viewName = mv.getViewName();

 

2. ViewResolver 호출

"new-form"이라는 뷰 이름으로 뷰 리졸버를 순서대로 호출한다.

BeanNameViewResolver는 new-form이라는 빈이 없으므로

InternalResourceViewResolver가 호출된다.

 

3. InternalResourceViewResolver의 반환값

뷰 리졸버가 InternalResourceView를 반환한다.

// Example. 직접 만든 MVC
MyView view = viewResolver(viewName);

 

4. view.render()

// Example. 직접 만든 MVC
view.render(mv.getModel(), request, response);

view.render()가 호출된다. InternalResourceView는 forward()를 사용해 JSP를 실행한다.

Comments