스프링/3. 스프링 MVC

33. 뷰 리졸버

sdafdq 2023. 8. 9. 22:21
@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");
    }
}

제대로 제기능을 하게 끔 ModelAndView를 반환토록 했다.

이렇게 논리이름을 넣어서 반환하도록 했다.

그렇지만 이렇게 하면 당연히 안된다..

우리가 실제 물리이름이 뭔지 알려줘야 한다.

 

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp

 

application.properties에 이렇게 해줬다.

이렇게 해 놓으면 스프링부트가 저걸 읽으면서 

@Bean
InternalResourceViewResolver internalResourceViewResolver(){
	return new InternalResourceViewResolver("/WEB-INF/views/", ".jsp");
}

예시로 이런 식으로 자동으로 ViewResolver를 등록해준다.

Bean으로 등록하는 것도 Mapping에 저런 식으로 등록하는 거겠지..? 아, 그러면 @Bean은 @Bean형식 등록인 Adapter를 찾아서 어댑터도 가져오겠지..?

 

 

많은 뷰 리졸버가 있지만, 몇개만 소개하자면

BeanNameViewResolver : Bean이름으로 뷰를 찾아서 반환하는 뷰 리졸버.

InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환해주는 뷰 리졸버.

 

new-form이라는 BeanName을 찾아봤는데 없다, 그래서 InternalResourceViewResolver를 뒤져본다. 

매칭 되는 부분이 있다. 그래서 View를 반환해준다.

이 때 InternalResourceView를 반환해준다. 이거는 jsp처럼 forward()를 처리할 경우에 사용한다.

이건 실제로 forward()를 호출한다.

 

다른 view의 경우는 그냥 자바로 랜더링한다.

 

만약 jstl (우리가 jsp 다루면서 c:for 이런 거 썼던 거)가 있으면 InternalResourceView를 상속받은 JstlView를 반환.

그냥 부가기능 더 추가된거임.

 

Thymeleaf 사용하면 ThymeleafViewResolver를 등록해야 하는데, 라이브러리만 등록하면 스프링 부트가 알아서 해준다.

 

 

 

'스프링 > 3. 스프링 MVC' 카테고리의 다른 글

35. 통합  (0) 2023.08.10
34. 스프링 MVC  (0) 2023.08.09
32. 핸들러매핑, 핸들러어댑터  (0) 2023.08.09
31. 스프링 MVC 구조  (0) 2023.08.09
30. 어댑터 패턴 정리  (0) 2023.08.07