-
스프링4.0 - MVC : 뷰 구현웹프로그래밍/spring 2018. 7. 21. 15:49
- 컨트롤러의 처리 결과가 뷰로 전달되는 과정
@Controller 클래스 포함한 모든 웹 요청을 처리하는 객체를 '핸들러'라고 한다.
HandlerAdapter는 핸들러의 실행 결과를 DispatcherServlet이 요구하는 ModelAndView로 변환해준다.(ex. 컨트롤러 메서드가 String을 리턴하는 경우)
DispatcherServlet은 ViewResolver를 사용하여 출력할 View 객체를 구한 후 내용을 생성한다.
- ViewResolver
컨트롤러가 지정한 뷰 이름으로 View 객체를 구한다.
View 객체에는 컨텐트 타입(text/html)을 리턴하는 getContenType() 메서드와
파라미터로 모델과 요청/응답 객체를 갖는 render()메서드가 있다.
-ViewResolver 구현 클래스
InternalResourceViewResolver - 뷰 이름으로 JSP나 Tiles 연동을 위한 View 객체를 리턴한다.
BeanNameViewResolver - 뷰 이름과 동일한 이름의 빈 객체를 View 객체로 사용한다.
VelocityViewResolver
VeloctiyLayoutViewResolver
- InternalResourceViewResolver
이 클래스는 InternalResourceView 타입의 뷰 객체를 리턴한다.
JSP, HTML과 같은 웹 어플리케이션의 내부 자원을 이용해서 응답 결과를 생성한다.
JSTL이 존재할 경우 하위 타입은 JstrlView 객체를 리턴한다.
※ /WEB-INF 하위에 JSP 파일을 위치시키는 이유는 클라이언트가 직접 접근하는 것을 막기 위함이다.
웹 컨테이너가 /WEB-INF 하위 경로에 접근하는 것을 제한한다.
-설정법
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
- BeanNameViewResolver
뷰 이름과 동일한 이름을 갖는 빈 객체를 뷰로 사용한다.
주로 파일 다운로드 기능을 위한 커스텀 View클래스로 사용된다.
-설정법
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
</bean>
<bean id="download" class="net.madvirus.spring4.chap08.file.DownloadView">
</bean>
아래 메서드에서 ModelAndView 객체로 뷰 이름(빈 객체 이름)을 리턴한다.
@RequestMapping("/file/{fileId}")
public ModelAndView download(@PathVariable String fileId, HttpServletResponse response) throws IOException {
File downloadFile = getFile(fileId);
if (downloadFile == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return null;
}
return new ModelAndView("download", "downloadFile", downloadFile);
}
- 다수의 ViewResolver 설정하기
하나의 DispatcherServlet에서 2개 이상의 ViewResolver를 가질 수 있다.
order 값이 작은 순서데로 ViewResolver에게 뷰 이름에 해당하는 View 객체를 요청한다.
우선순위가 높은 ViewResolver가 null을 리턴하면 그 다음 순위에게 요청한다.
InternalResourceViewResolver는 null 리턴하지 않으므로 가장 낮은 순위로 지정해야 한다.
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/view/" p:suffix=".jsp" p:order="0"/>
'웹프로그래밍 > spring' 카테고리의 다른 글
스프링 4.0 - myBatis 연동 (0) 2018.08.02 스프링4.0 - 뷰 규현 : 커스텀태그 정리 (0) 2018.07.21 스프링4.0 - XML/JSON 변환처리 (0) 2018.07.19 스프링4.0-WebApplicationContext 계층 : 다수의 DispatcherServlet 설정 (0) 2018.07.18 스프링 4.0 - 정적 자원 설정하기 (ex. 이미지파일 경로 맵핑) (0) 2018.07.18