뷰 리졸버

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

1 = BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다. (예: 엑셀 파일 생성 기능에 사용) 2 = InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환한다.⭐️ 현재 진행하는 프로젝트들 => 빈 이름으로 찾는 게 아니라 InternalResourceViewResolver로 뷰 리졸버를 찾고, 이것은 JSP를 처리할 수 있는 뷰를 반환한다!

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;

//스프링 빈 이름을 url로 맞춤.
@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");
    }
}

resources>application.properties에 다음과 같은 prefix와 suffix를 추가한다.

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
  1. 핸들러 어댑터 호출 핸들러 어댑터를 통해 new-form 이라는 논리 뷰 이름을 획득한다.

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

  3. InternalResourceViewResolver : InternalResourceView ⭐️를 반환한다.

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

  5. view.render() 가 호출되고, InternalResourceView 는 forward() 를 사용해서 JSP를 실행한다.

Last updated