MVC, JSP, servlet-context.xml, ViewResolver

ACAI BERRY DEVELOVER·2023년 3월 7일
0
post-thumbnail

뷰 영역 구현

컨트롤러는 최종적으로 결과를 출력할 뷰와 뷰에 전달할 객체를 담고 있는 ModelAndView 객체를 리턴한다. DispatherServlet은 ViewResolver를 사용하여 결과를 출력할 View 객체를 구하고, 구한 View 객체를 이용하여 내용을 생성한다.

Spring MVC의 ViewResolver 가이드

모든 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

profile
쓸때 대충 쓰지 말고! 공부하면서 써!

0개의 댓글