본문 바로가기
Spring/이론

Apache Tiles

by 모스키토끼 2020. 4. 8.

Apache tiles를 사용하는 이유

  • 틀(template)을 만들고 안에 contents를 채워가는 형식
  • layout을 바꾸고 싶을 때 한 페이지만 바꿔줘도 (template만 바꿔줘도) 다른 페이지 전부 바뀐다.
    ->일관성 있음

특징

  • Apache tiles는 MVC technology와 궁합이 잘 맞다.
  • template에 들어갈 각 조각들만 잘 조합하면 된다.(런타임 시 완성되는 페이지)
  • 사용자들이 많은 페이지들이 일관성 있다고 느낀다.

반복되는 header, menu, footer 등은 고정하고 body 부분만 갈아끼워 넣는 형태

 

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

 

Apache Tiles - Framework - The Composite View Pattern

The Composite View Pattern All websites have something in common: they are made of pages that share similar structures. The pages share the same layout, while each page is made of different independent pieces, but always placed in the same position across

tiles.apache.org

 

'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

댓글