참조: http://richardbarabe.wordpress.com/2009/02/23/apache-tiles-2-integration-with-spring-mvc/

오늘은 노동자의 날(?)이라 쉬는 사람들이 많은데도 출근한 성윤군이랑 열심히 타일즈를 적용하고 있습니다. 아파치 타일즈 2 홈페이지, 프로 스프링 2.5, 스프링 3.0 레퍼런스를 보면서 적용했지만... 잘 안되더군요.  결국은 위 블로거가 제공하는 패치를 사용해서 해결했습니다.

0. pom.xml에 Tiles 라이브러리 추가하기

        <!-- tiles -->
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles</artifactId>
            <version>2.1.2.osgi</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles.core</artifactId>
            <version>2.1.2.osgi</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles.servlet</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>com.springsource.org.apache.tiles.jsp</artifactId>
            <version>2.1.2</version>
        </dependency>

1. xxx-servlet.xml에 TilesConfigurer 추가하기

    <!-- ============================================================= -->
    <!--  Tiles                                                        -->
    <!-- ============================================================= -->
    <bean id="tilesConfigurer" class="springsprout.web.SpringTilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles/general-layout.xml</value>
                <value>/WEB-INF/tiles/tiles-content.xml</value>
            </list>
        </property>
    </bean>

2. xxx-servlet.xml에 뷰 리졸버 추가하기

    <bean id="tilesViewResolver"
        class="org.springframework.web.servlet.view.UrlBasedViewResolver"
        p:viewClass="org.springframework.web.servlet.view.tiles2.TilesView" />

3. 타일즈 설정 파일 추가하기

위 설정대로 /WEB-INF/ 밑에 tiles라는 폴더를 만들고 그 안에 파일 두 개를 만들어 줍니다.

저희는 제일 간단한 3단 구조로 설정했습니다.

general-layout.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
    <definition name=".root" template="jsp/root.jsp">
        <put-attribute name="header" value="/jsp/layout/header.jsp" />
        <put-attribute name="footer" value="/jsp/layout/footer.jsp" />
    </definition>
</tiles-definitions>

tiles-content.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
    <definition name="index" extends=".root">
        <put-attribute name="content" value="/jsp/index.jsp" />
    </definition>

    <definition name="login" extends=".root">
        <put-attribute name="content" value="/jsp/login/login.jsp" />
    </definition>
</tiles-definitions>

general-layout.xml은 그야말로 템플릿 레이아웃이고 이 레이아웃을 tiles-context.xml에 상속 받아서 사용합니다. 이렇게 해야 설정을 최소화 할 수 있겠죠. 불편한 거 하나는.. 모든 뷰를 명시적으로 저렇게 설정이 한 덩어리씩 추가가 되어야 한다는 거죠. 이걸 CoC로 어떻게 간편화 할 수 없을지 고민입니다. 타일즈에서 만들어 주세요~

4. 템플릿 만들기

general-layout.xml에 정의한 root.jsp, header,jsp, footer.jsp, empty.jsp 파일을 만듭니다. 이 JSP 페이지가 기본 레이아웃을 그리는 JSP 페이지입니다.

roo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title>SpringSprout</title>
    <link href="/css/main.css" media="screen" rel="stylesheet" type="text/css" />
  </head>
<body>
    <div id="main">
        <tiles:insertAttribute name="header"/>
        <tiles:insertAttribute name="content"/>
    </div>
    <tiles:insertAttribute name="footer"/>
</body>
</html>

header.jsp

<div id="header" class="basic">
    <div class="site">
         <div class="logo">
             <a href="/"><img src="images/logo.png" alt="springsprout" /></a>
         </div>
         <div class="actions">
             <a href="/">Home</a>
             <a href="/">Studies</a>
             <a href="/">Seminars</a>
             <a href="/">Blog</a>
             <a href="/">Wiki</a>
             <a href="/">Signup</a>
             <a href="/login.do">Login</a>
         </div>
    </div>
</div>

footer.jsp

<div id="footer">
    <div class="site">
        <h2>Good Bye ~~~!!</h2>
    </div>
</div>

empty.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertAttribute name="content"/>

끝입니다. 이제 새로운 페이지를 만들 때 마다 헤더와 푸터를 제외하고 몸통 부분만 만들면 됩니다.

5. 패치

1번에서 설정한 tilesConfigurer를 등록하시려면 아래 파일이 필요하실 겁니다.

cfile25.uf.110CF31749FACA0BE30768.java
이 파일을 사용하지 않고 스프링이 제공하는 클래스를 사용하시면 맨 위 링크의 글에 나타나 있는 에러가 발생할 겁니다.