티스토리 뷰
View Resolver
뷰를 선택하는 것도 컨트롤러의 역할이다.
하지만 위처럼 컨트롤러에서 매번 뷰를 생성하는 것은 비효율적이므로, 스프링에서는 이 작업을 적절히 분리하였다.
컨트롤러는 뷰의 논리적인 이름만을 리턴한 뒤 역할을 종료하고, 이를 DispatcherServlet의 뷰 리졸버가 받아 사용할 뷰 오브젝트를 찾고 생성하는 작업을 진행해준다.
게다가 뷰 리졸버는 보통 뷰 오브젝트를 캐싱하므로 같은 URL의 뷰가 반복적으로 만들어지지 않는 장점도 있다.
뷰 리졸버도 하나 이상 등록해서 사용할 수 있는데, 이때는 핸들러 매핑처럼 order 프로퍼티를 이용해 적용 순서를 적용해주는 것이 좋다.
뷰 리졸버는 ViewResolver 인터페이스를 구현해서 생성한다.
public interface ViewResolver{
View resolveViewName(String viewName, Locale locale) throws Exception;
}
InternalResourceViewResolver
주로 JSP를 사용할 때 쓰이는 뷰 리졸버이다.
뷰를 생성할 필요없이 논리적인 이름만을 리턴해주면 되는데, 그대로 사용할 경우 풀 패스를 써줘야 하므로 그대로 사용하는 것은 피해야 한다.
prefix, suffix 프로퍼티를 이용하면 앞뒤에 붙는 내용을 생략할 수 있다.
컨트롤러에서는 hello 만을 리턴해주면 된다. 이는 나중에 변경에도 용이하다.
JSTL 라이브러리가 클래스패스에 존재할 경우 JstlView를 사용하고, 존재하지 않으면 InternalResourceView를 사용한다.
VelocityViewResolver, FreeMarkerViewResolver
Velocity와 FreeMarker를 사용하게 해주는 뷰 리졸버이다.
InternalResourceViewResolver와 같이 prefix, suffix를 사용가능하다.
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view" />
<property name="suffix" value=".jsp" />
</bean>
ResourceBundleViewResolver
컨트롤러가 아닌 외부에서 뷰를 결정할 때, 한가지 뷰 만이 아니라 컨트롤러마다 뷰가 달라질 수 있을 때 사용하면 괜찮은 방식이다.
ResourceBundleViewResolver를 사용하면 클래스패스의 views.properties 파일에 논리적 이름과 뷰 정보를 정의하여 작성하고, 이를 사용하여 뷰를 선택하게 할 수 있다.
아래는 views.properties 파일 예시이다.
hello.(class)=org.springframework.web.servlet.view.JstlView
hello.url=/WEB-INF/view/hello.jsp
bye.(class)=org.springframework.web.servlet.view.velocity.VelocityView
bye.url=bye.vm
독립된 파일을 통해 뷰를 자유롭게 매핑할 수 있지만, 모든 뷰를 일일히 매핑해줘야 하는 불편도 뒤따른다.
그래서 단독으로 사용하는 것은 추천되지 않고, 다른 뷰 리졸버와 함께하면 유용하게 사용될 수 있다.
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="order" value="0" />
</bean>
<!-- order 기본값이 Integer.MAX 이므로 굳이 order 프로퍼티를 안줘도 됨 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
이렇게 사용하면 view.properties에 뷰가 없을 경우 아래 InternalResourceViewResolver를 사용하게 된다.
이로써 특별한 타입의 뷰가 필요할 때만 view.properties에 작성해주며 사용할 수 있다.
XmlViewResolver
ResourceBundleViewResolver와 용도는 동일하고, views.properties 대신 /WEB-INF/views.xml을 사용한다.
추가로 이 파일은 서블릿 컨텍스트를 부모로 가지므로 DI가 가능하다는 장점이 있다.
BeanNameViewResolver
뷰 이름과 동일한 이름을 가진 빈을 찾아서 뷰로 이용하게 해준다.
- Total
- Today
- Yesterday
- Spring + ELK
- Logstash to ElasticSearch
- rabbitmq
- 운동일기
- zipkin
- MariaDB
- 루틴기록
- Gateway
- elasticSearch
- springcloud
- 오늘저녁 삼겹살
- JWT
- ACTUATOR
- Feign
- git
- docker
- kafka
- prometheus
- 운동
- MSA
- producer
- UserService
- consumer
- 미래의나에게동기부여
- LoadBalancer
- github
- Kafka Connect
- config
- Logstash 활용
- 빅-오
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |