Apache tiles를 사용하는 이유
- 틀(template)을 만들고 안에 contents를 채워가는 형식
- layout을 바꾸고 싶을 때 한 페이지만 바꿔줘도 (template만 바꿔줘도) 다른 페이지 전부 바뀐다.
->일관성 있음
특징
- Apache tiles는 MVC technology와 궁합이 잘 맞다.
- template에 들어갈 각 조각들만 잘 조합하면 된다.(런타임 시 완성되는 페이지)
- 사용자들이 많은 페이지들이 일관성 있다고 느낀다.
Page Template - layout 페이지
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<table>
<tr>
<td colspan="2">
<tiles:insertAttribute name ="header" />
</td>
</tr>
<tr>
<td>
<tiles:insertAttribute name ="menu" />
</td>
<td>
<tiles:insertAttribute name ="body" />
</td>
</tr>
<tr>
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
<table>
- 위 이미지와 같이 layer에 header menu body footer 속성을 넣어놨다.
Tiles Definition
<definition name="myapp.homepage" template="/templates/layout.jsp">
<put-attribute name="header" value="/tiles/banner.jsp" />
<put-attribute name="menu" value="/tiles/common_menu.jsp" />
<put-attribute name="body" value="/tiles/home_body.jsp" />
<put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>
- xml에 template과 attribute의 경로를 정의 해주면 하나의 페이지가 만들어진다.
- menu header footer는 많은 페이지에서 사용되므로 상속을 이용하여 중복 코드를 피한다.
Definition 상속(Inheritance)
<definition name="base" template="/templates/layout.jsp">
<put-attribute name ="title" vlaue="Homepage" />
<put-attribute name="header" value="/tiles/banner.jsp" />
<put-attribute name="menu" value="/tiles/common_menu.jsp" />
<put-attribute name="content" value="/tiles/home_body.jsp" />
<put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>
<definition name="home" extends="base">
<put-attribute name ="title" vlaue="Offers Homepage" />
<put-attribute name="content" value="/WEB-INF/tiles/home.jsp" />
</definition>
결론, 이렇게 definition된 attribute가 런타임 시에 template에 슈슈슉 들어가 페이지가 완성된다.
Spring MVC와 Apache Tiles
의존성 추가
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>...</version>
</dependency>
Spring configuration
기존에 있던 InternalResourceViewResolver 삭제 후 tilesViewResolver 빈 추가
<beans:bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
</beans:bean>
<beans:bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<beans:property name="definitions">
<beans:list>
<beans:value>/WEB-INF/tile-defs/tiles.xml</beans:value>
</beans:list>
</beans:property>
</beans:bean>
- TilesViewResolver:
- logical view 이름을 tiles definition으로 해석 - TilesConfigurer:
- definition이 포함된 파일 세트를 사용하여 TilesContainer를 구성
Reference
https://tiles.apache.org/framework/tutorial/pattern.html
'Spring > 이론' 카테고리의 다른 글
Entity Relationships (0) | 2020.04.17 |
---|---|
Hibernate (0) | 2020.04.10 |
Logging (SLF4J and Logback) (0) | 2020.04.01 |
Spring Security (0) | 2020.03.30 |
Spring Web Form (0) | 2020.03.25 |
댓글