쌓고 쌓다
뷰 리졸버 동작 본문
OldController
@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"); // 추가된 부분
}
}
기존의 핸들러에 뷰를 사용할 수 있도록 new ModelAndView("new-form")를 반환해준다.
application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
스프링 부트가 자동 등록하는 뷰 리졸버
- BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환한다.
- InternalResourceViewResolver : JSP를 처리할 수 있는 뷰를 반환한다.
뷰 리졸버 동작 과정
1. 핸들러 어댑터 호출
핸들러 어댑터를 통하여 "new-form"이라는 논리 뷰 이름을 갖는다.
// Example. 직접 만든 MVC
MyHandlerAdapter adapter = getHandlerAdapter(handler);
ModelView mv = adapter.handle(request, response, handler);
String viewName = mv.getViewName();
2. ViewResolver 호출
"new-form"이라는 뷰 이름으로 뷰 리졸버를 순서대로 호출한다.
BeanNameViewResolver는 new-form이라는 빈이 없으므로
InternalResourceViewResolver가 호출된다.
3. InternalResourceViewResolver의 반환값
뷰 리졸버가 InternalResourceView를 반환한다.
// Example. 직접 만든 MVC
MyView view = viewResolver(viewName);
4. view.render()
// Example. 직접 만든 MVC
view.render(mv.getModel(), request, response);
view.render()가 호출된다. InternalResourceView는 forward()를 사용해 JSP를 실행한다.
'프로그래밍 > spring' 카테고리의 다른 글
[스프링 부트] 첨부파일(파일 업로드) 목록 수정 - 21 (0) | 2023.08.09 |
---|---|
Spring MVC 사용 방식 (0) | 2023.08.08 |
[스프링 부트] 게시글 삭제시 첨부파일 삭제 - 20 (0) | 2023.08.07 |
핸들러 매핑과 핸들러 어댑터 이해하기 (0) | 2023.08.06 |
[스프링 부트] 파일 응답 및 이미지 출력, MIME 타입 확인 - 19 (0) | 2023.08.05 |
Comments