@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");
}
}
위의 컨트롤러는 빈의 이름과 요청 url이 일치해야 하는 컨트롤러로 BeanNameUrlHandlerMapping
에서 핸들러로 반환된다.그 후 이를 처리할 수 있는 SimpleControllerHandlerAdapter
가 핸들러 어뎁터로써 반환되고 수행된다.
version3 처럼 리턴값으로 ModelAndView를 지정하고, 아래 옵션을 설정하면 뷰리졸버가 작동한다.이는 InternalResourceViewResovler
라는 자동으로 등록된 뷰 리졸버가 처리한다.
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
application.properties에서 설정해하면 스프링부트가 아래처럼 코드를 생성한다.
@Bean
InternalResourceViewResolver internalResourceViewResolver() {
return new InternalResourceViewResolver("/WEB-INF/views",".jsp");
}
InternalResourceViewResovler는 InternalResourceView를 반환한다.
InternalResourceView는 forward() 기능을 가지고 있고, 이를 사용해 JSP를 실행한다.
(JSTL을 사용하면 JstlView를 반환한다.)
(타임리프를 사용하기 위해선 타임리프뷰 리졸버를 등록해야 하고, 따로 forward()를 호출하지 않고 렌더링 된다.)