스프링 MVC에서 타일즈 2 사용하기
참조: http://richardbarabe.wordpress.com/2009/02/23/apache-tiles-2-integration-with-spring-mvc/
오늘은 노동자의 날(?)이라 쉬는 사람들이 많은데도 출근한 성윤군이랑 열심히 타일즈를 적용하고 있습니다. 아파치 타일즈 2 홈페이지, 프로 스프링 2.5, 스프링 3.0 레퍼런스를 보면서 적용했지만... 잘 안되더군요. 결국은 위 블로거가 제공하는 패치를 사용해서 해결했습니다.
0. pom.xml에 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에 뷰 리졸버 추가하기
class="org.springframework.web.servlet.view.UrlBasedViewResolver"
p:viewClass="org.springframework.web.servlet.view.tiles2.TilesView" />
3. 타일즈 설정 파일 추가하기
위 설정대로 /WEB-INF/ 밑에 tiles라는 폴더를 만들고 그 안에 파일 두 개를 만들어 줍니다.
저희는 제일 간단한 3단 구조로 설정했습니다.
general-layout.xml
<!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
<!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
<%@ 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 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 class="site">
<h2>Good Bye ~~~!!</h2>
</div>
</div>
empty.jsp
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertAttribute name="content"/>
끝입니다. 이제 새로운 페이지를 만들 때 마다 헤더와 푸터를 제외하고 몸통 부분만 만들면 됩니다.
5. 패치
1번에서 설정한 tilesConfigurer를 등록하시려면 아래 파일이 필요하실 겁니다.
cfile25.uf.110CF31749FACA0BE30768.java
이 파일을 사용하지 않고 스프링이 제공하는 클래스를 사용하시면 맨 위 링크의 글에 나타나 있는 에러가 발생할 겁니다.