뷰 리졸버에 대해 자세히 알아보았다.
package hello.servlet.web.springmvc.old;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@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");
}
}
이전 코드의 반환을 null이 아닌 ModelAndView를 생성하여 논리 주소를 넣어서 반환하였다.
정상 호출되지만, Whitelabel Error Page오류가 발생한다.
application.properties에
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
이 코드를 추가하면 된다.
스프링 부트는 InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록하는데, 이때 application.properties에 등록한
위의 설정정보를 사용해서 등록한다.
동작 방식
1. 핸들러 어댑터 호출
핸들러 어댑터를 통해 new-form이라는 논리 뷰 이름을 획득한다.
2. ViewResolver 호출
new-form이라는 뷰 이름으로 viewResolver를 순서대로 호출한다.
BeanNameViewResolver는 new-form이라는 이름의 스프링 빈으로 등록된 뷰를 찾아야 하지만 없다.
InternalResourceViewResolver가 호출된다.
3. InternalResourceViewResolver
이 뷰 리졸버는 InternalResourceViewResolver를 반환한다.
4. 뷰 - IntervalResourceView
internalResourceView는 JSP 포워드를 호출해서 처리할 수 있는 경우에 사용한다.
5. view.render()
view.render()가 호출되고 InternalResourceView는 forward()를 사용해서 JSP를 실행한다.
'웹프로그래밍 > 스프링 MVC' 카테고리의 다른 글
| 35 스프링 MVC - 컨트롤러 통합 (0) | 2022.04.01 |
|---|---|
| 34. 스프링 MVC - 시작하기 (0) | 2022.04.01 |
| 32. 핸들러 매핑과 핸들러 어댑터 (0) | 2022.03.31 |
| 31. 스프링 MVC 전체 구조 (0) | 2022.03.31 |
| 30. 유연한 컨트롤러2 - V5 (0) | 2022.03.30 |