2014년 1월 14일 화요일

[java] spring3 + tiles3 설정 하기

A free open-sourced templating framework for modern Java applications.
    Based upon the Composite pattern it is built to simplify the development of user interfaces.

For complex web sites it remains
         the easiest and most elegant way to work alongside any MVC technology.
위의 내용은 Tiles 공식 홈페이지 메인에 나오는 문구 입니다.
대충 번역을 하면 아래와 같습니다. 
tiles 는 java 어플리케이션에서 사용하는 무료 오픈 소스 templating 프레임 워크 이다. 
Composite pattern 에 기초를 두었고 개발자가 사용자 인터페이스 만드는것을 간단하게 해준다. 
복잡한 웹 사이트를 위해서 tiles는 어떤 MVC 기술과 함께 작업하기에 가장 쉽고 상당히 세련된 방법 으로 남을것이다. 

이 내용이 Tiles 의 목적과 추구하는 방향에 대해서 간명하게 설명을 해주고 있습니다. 
Tiles 는 복잡한 웹사이트 개발을 쉽게 하기 위해서 개발된  무료 오픈 소스 templating  프레임 워크 입니다. 
공통된 요소 들을 부분 적으로 모듈화 해서 페이지를 runtime 시에 조립 가능하게 만들어 소스 코드의 중복을 줄이고 재새용 가능한 templates으로 만들수 있게 해줍니다. 

설정하는 방법은 아래의 순서대로 진행하면 됩니다. 

1. maven에서 라이브러리 설정하기(추가) 
    pom.xml 에 다음을 추가 한다. 


    <properties>
        <org.apache.tiles.version>3.0.3</org.apache.tiles.version>
    </properties>

    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-jsp</artifactId>
        <version>${org.apache.tiles.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-core</artifactId>
        <version>${org.apache.tiles.version}</version>
    </dependency>



2.스프링의  context-servlet.xml 에 설정하기
Tiles의 설정 파일과 viewResolver를 설정 합니다. 

    <beans:bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
        <beans:property name="order" value="1"/>
    </beans:bean>

    <beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <beans:property name="definitions">
            <beans:list>
                 <beans:value>/WEB-INF/tiles/tiles-layout.xml</beans:value>
            </beans:list>
        </beans:property>
    </beans:bean>


 3. 기본 템플릿 페이지를 만듭니다. 
(default_template.jsp 이란 이름으로 파일을 생성했습니다.)


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<tiles:insertAttribute name="header" />
</head>
<body>
<tiles:insertAttribute name="menu" />
<tiles:insertAttribute name="body" />
<tiles:insertAttribute name="footer" />
</body>
</html>


4. Tiles 설정 파일을 생성
위(2)에 Spring 에 설정된대로 WEB-INF/tiles/tiles-layout.xml 파일을 생성하고 설정을 합니다. 
각각의 jsp페이지는 해달 부분의 구현을 하면 됩니다. 
name에 * 표시한 부분은 {1} {2} 등으로 맵핑이 가능합니다.  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>

<!-- default : 템플릿에 설정된 페이지의 구성 요소에 대한 실제 파일을 지정합니다.  -->
<definition name="default" template="/WEB-INF/views/layouts/default_template.jsp">
<put-attribute name="header" value="/WEB-INF/views/layouts/default/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/views/layouts/default/menu.jsp" />
<put-attribute name="body" value="/WEB-INF/views/layouts/default/body.jsp" />
<put-attribute name="footer" value="/WEB-INF/views/layouts/default/footer.jsp" />
</definition>

<!--  default를 확장하여 test 라는 URL로 시작되는 호출이 오는 경우 아래 설정에 의해서 페이지를 만들게 됩니다. -->
<definition name="test/*" extends="default">
<put-attribute name="body" value="/WEB-INF/views/test/{1}.jsp" />
</definition>
</tiles-definitions>


이렇게 설정후에 ~/test/~ 인 URL을 만들어서 호출하면 body 부분만 바뀌고  default   템플릿으로 구성된 페이지를 보게 됩니다. 

[참고 자료]

Tiles 공식 사이트에 가면 더 많은 정보를 얻을수 있습니다.
    http://tiles.apache.org


댓글 3개:

  1. 안녕하세요 너무 오래전에 포스팅하신거라 댓글 보실지 모르겠지만 ㅠㅠ {1}, {2} 이렇게 설정하는게 뭘 뜻하는건가요? 찾아봐도 감이 잘 안오네요..

    답글삭제
    답글
    1. URL 의 뎁스 라고 생각하시면 됩니다.
      에서
      만약 URL이 test/aaa/bbb 라고 한다면
      {1} = aaa, {2} = bbb 값을 가지게 됩니다.

      삭제
    2. 생각해 보니 위에 설명이 좀 이상하네요..
      설정을 다음과 같이 한경우에
      < definition name="test/*/*" extends="default" >
      입력된 URL 에서 앞에위치에 있는 * 이 {1} 뒤에 *이 {2} 라고 생각하시면 됩니다.
      만약 URL이 test/aaa/bbb 라고 한다면
      {1} = aaa, {2} = bbb 값을 가지게 됩니다.

      삭제