컨트롤러의 처리 결과가 뷰로 전달되는 과정
@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 id="download" class="net.madvirus.spring4.chap08.file.DownloadView" />
아래 메서드에서 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' 카테고리의 다른 글
11.19(MyBatis 연동) (0) | 2020.11.19 |
---|---|
11.18(DispatcherServlet과 web.xml 설정) (0) | 2020.11.18 |
11.09(Spring Security - 사용자 인증) (0) | 2020.11.09 |
11.06(Spring Security - security 권한 생성) (0) | 2020.11.06 |
11.05(Spring Security - 로그인 페이지 커스터마이징, csrf 속성, login, logout) (0) | 2020.11.05 |