minOS

스프링 MVC - 구조 이해(3) 본문

TIL/김영한의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

스프링 MVC - 구조 이해(3)

minOE 2024. 7. 18. 16:30
728x90

뷰 리졸버

@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");
    }
}

 

View를 사용할 수 있도록 다음 코드를 추가했다. `return new ModelAndView("new-form");`

실행

오류페이지가 나오지만 호출은 된다. 

application.properties
`에 다음 코드를 추가하면

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

 




뷰리졸버가 잘 동작했음을 알 수 있다.


스프링 부트는 `InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록하는데, 이때 `application.properties` 에 등록한 `spring.mvc.view.prefix` , `spring.mvc.view.suffix` 설정 정보를 사용해서 등록한다.
참고로 권장하지는 않지만 설정 없이 다음과 같이 전체 경로를 주어도 동작하기는 한다.

`return new ModelAndView("/WEB-INF/views/new-form.jsp");`



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

1 = BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다. (예: 엑셀 파일 생성 기능 에 사용)
2 = InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환한다.




1. 핸들러 어댑터 호출
핸들러 어댑터를 통해 `new-form` 이라는 논리 뷰 이름을 획득한다.


2. ViewResolver
호출
`
new-form` 이라는 뷰 이름으로 viewResolver를 순서대로 호출한다.
`BeanNameViewResolver`new-form` 이라는 이름의 스프링 빈으로 등록된 뷰를 찾아야 하는데 없다. InternalResourceViewResolver가 호출된다.


3. InternalResourceViewResolver

이 뷰 리졸버는 InternalResourceView` 를 반환한다.


4. - InternalResourceView
`
InternalResourceView` JSP처럼 포워드 `forward()` 를 호출해서 처리할 수 있는 경우에 사용한다.


5. view.render()
`
view.render()가 호출되고 `InternalResourceViewforward()를 사용해서 JSP를 실행한다.

 

 

728x90