뷰 영역 구현
컨트롤러는 최종적으로 결과를 출력할 뷰와 뷰에 전달할 객체를 담고 있는 ModelAndView 객체를 리턴한다. DispatherServlet은 ViewResolver를 사용하여 결과를 출력할 View 객체를 구하고, 구한 View 객체를 이용하여 내용을 생성한다.
모든 MVC 프레임워크는 뷰 작업 방법을 제공합니다.
Spring은 구현을 특정 뷰 기술에 묶지 않고 브라우저에서 모델을 렌더링할 수 있게 해주는 뷰 리졸버를 통해 이를 수행합니다. ViewResolver는 뷰 이름을 실제 뷰에 매핑합니다. 그리고 Spring 프레임워크는 InternalResourceViewResolver , BeanNameViewResolver, 그리고 몇 가지 다른 것들과 같은 꽤 많은 뷰 리졸버와 함께 제공됩니다.
1) 스프링 웹 구성
2) InternalResourceViewResolver 추가
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/view/");
bean.setSuffix(".jsp");
return bean;
}
이 ViewResolver를 사용하면 뷰 이름에 대한 접두사 또는 접미사와 같은 속성을 설정하여 최종 뷰 페이지 URL을 생성할 수 있습니다.
3) BeanNameViewResolver 추가
@Bean
public BeanNameViewResolver beanNameViewResolver(){
return new BeanNameViewResolver();
}
ViewResolver가 정의되면 뷰를 렌더링하기 위해 DispatcherServlet 에 의해 실행될 수 있도록 View 유형의 빈을 정의해야 합니다 .
@Bean
public View sample() {
return new JstlView("/WEB-INF/view/sample.jsp");
}
다음은 컨트롤러 클래스의 해당 처리기 메서드입니다.
@GetMapping("/sample")
public String showForm() {
return "sample";
}
컨트롤러 메서드에서 뷰 이름은 " 샘플" 로 반환되며 , 이는 이 핸들러 메서드의 뷰가 /WEB-INF/view/sample.jspURL을 포함하는 JstlView 클래스로 확인됨을 의미합니다.
4) ViewResolver 연결 및 순서 우선순위 정의
Spring MVC는 또한 다중 뷰 리졸버를 지원합니다 .
이를 통해 일부 상황에서 특정 보기를 재정의할 수 있습니다. 구성에 둘 이상의 리졸버를 추가하여 보기 리졸버를 간단히 연결할 수 있습니다.
이 작업을 마치면 이러한 리졸버에 대한 순서를 정의해야 합니다. order 속성은 체인 에서 호출 순서를 정의하는 데 사용됩니다. 순서 속성(가장 큰 순서 번호)이 높을수록 뷰 리졸버가 체인에서 나중에 배치됩니다.
순서를 정의하기 위해 다음 코드 줄을 뷰 리졸버 구성에 추가할 수 있습니다.
bean.setOrder(0);
InternalResourceViewResolver가 더 높은 순서를 가져야 하므로 순서 우선순위에 주의하십시오 . 이는 매우 명시적인 매핑을 나타내도록 의도되었기 때문입니다. 그리고 다른 리졸버의 순서가 더 높으면 InternalResourceViewResolver가 호출되지 않을 수 있습니다.
스프링의 MVC의 JSP를 처리하는 설정은 servlet-context.xml에 아래와 같이 작성되어 있다.
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:proper
화면설정은 ViewResolver라는 객체를 통해서 이루어진다.
'/WEB-INF/views/' 폴더를 이용한다.
'/WEB-INF/'은 브라우저에서 직접 접근할 수 없는 경로이므로, 반드시 Controller를 이용하는 모델 2방식에서는 기본적으로 사용하는 방식이다.
게시물 리스트의 URL은 '/board/list'이므로 최종적인 '/WEB-INF/views/board/list.jsp'가 된다. 해당경로에 list.jsp파일을 추가하라.
reference: https://www.baeldung.com/spring-mvc-view-resolver-tutorial
https://devbox.tistory.com/entry/Spring-ViewResolver-%EC%84%A4%EC%A0%95