- String MVC - 뷰
1. InternalResourceViewResolver
뷰 이름으로부터 JSP나 Tiles연동을 위한 View객체를 리턴
==> jsp로 화면에뿌릴때에는, 이것을 사용.
==> Internal은 무조건 prefix + suffix가 있기때문에, null은 일어날 수없다. 404만 일어날 뿐.
2. BeanNameViewResolver
뷰 이름과 동일한 이름을 갖는 빈 객체를 View 객체로 사용한다.
==> 클래스로 뷰객체로 만들때 사용한다 ex)화면변하지않는채로 파일다운로드할때
1. new ModelAndView("download") == 첫 매개변수는 viewname으로 사용될것이고
2. dispatcher는 viewResolver를 찾아간다.
3. viewResolver를 찾아왔더니 클래스가 BeanNameResolver라서,
4. 뷰네임으로 가진 빈객체를 찾아간다.
5. download라는 name을 가진 bean을 찾아가서 수행한다.
3. ResourceBundleViewResolver
뷰 이름과 View 객체간의 Mapping정보를 저장하기위해 Resource파일사용
4. ViewResolver Interface
매개변수로 String viewName, Local locale 두가지 변수를 받는다.
Mapping되는 View객체가 존재하지 않으면, null을 리턴한다.
5. XmlViewResolver 설정
ex)
<bean id="viewResolver"
class="org.springframework.web.servlet.view.XmlViewResolver"
p:location="/WEB-INF/nonHtml-view.xml"/>
BeanName과 성능은 똑같지만,
차이점은
BeanName은 모든 xml문서를 검색하고,
XmlViewResolver는 별도의 xml 설정파일에서만 빈 객체를 검색한다.
해당 bean객체가 없다면 null값을 리턴한다.
<주의사항>
하나의 dispatcher-servlet은 한개 이상의 viewResolver를 설정할 수 있습니다.
한개 이상의 viewResolver가 있을때에는 dispatcher는 먼저 '선언' 된 순서대로 Resolver에게 view 객체를 요청합니다.
우선순위가 높은 viewResolver가 return값이 null일때 그다음 순위의 viewResolver에게 요청하게됩니다.
그렇기때문에,
우선순위를 결정할때, 주의할점은 Internal은 반드시 맨 마지막으로 선언되어야한다.
Internal이 먼저 선언되고 BeanName을 선언했을때, 내가 원하는건 BeanName인데
Internal은 무조건 prefix + suffix가 있기때문에, null은 일어날 수없어서
null을 리턴할일이 전혀없다. 그렇기때문에 그다음 순위인 BeanName은 절대 실행될일이 없어진다.
'JAVA > Spring' 카테고리의 다른 글
Spring이 제공하는 폼 관련 커스텀 태그(밑에 글과 연동) (5) | 2018.09.19 |
---|---|
Spring MVC - 두번째 LoginController (0) | 2018.09.19 |
Spring MVC - ajax + responseBody (0) | 2018.09.17 |
Spring MVC - BindingResult 사용법 (0) | 2018.09.13 |
Spring - RESTful 예제 (2) | 2018.09.13 |