> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/mvc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/mvc/5.-mvc/undefined-1.md).

# 뷰 리졸버

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

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

```java
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를 실행한다.

![InternalResourceView에서 JSP로 forward함수가 구현된 모습](https://4059345879-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MdtAbfiAnzkPUNovpHX%2F-Me4tQvm-UivBcgTFPBJ%2F-Me4tgEZTrANzbSCWUkT%2FScreen%20Shot%202021-07-08%20at%208.35.14%20PM.png?alt=media\&token=0c3a16e9-a693-4f64-bd39-418b58bd99c3)
