@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 |