본문 바로가기
Spring/Spring

[Spring] 에서 타일즈(Tiles) 세팅 및 사용법

1. Tiles Framework란?

 

Tiles는 웹페이지의 상단메뉴나 좌측메뉴, 하단메뉴 등의 내용처럼 반복되는 부분들을

한 곳에서 관리할 수 있게 도와주는 템플릿 프레임워크 입니다.

 

예를들어 웹페이지상의 Footer부분은 모든 페이지에서 공통적으로 보여지는 부분인데

만약 Footer부분에 있는 전화번호가 수정이 된다면 모든 페이지의 Footer부분에서 전화번호를

일일이 수정해야 할 것입니다.

 

하지만 Tiles는 별도로 Footer파일을 한개만 만들어 Include형식으로 각 페이지에 붙여서 사용할 수 있기 때문에 한번만 수정하면 전체 페이지가 모두 반영되어 유지보수에 있어서 합리적이라고 할 수 있습니다.

 

물론 JSP Include도 동일한 효과를 보여줄 수 있지만 Tiles는 좀 더 세분화 화여 관리가 가능할 뿐 아니라

마치 ajax처럼 부분적으로만 페이지 새로고침이 가능하기 때문에 그 활용성에 있어서 차이가 있습니다.

 

 

 

 

 

 

2. Tiles 요구 사항

 

Tiles는 게시글 작성일 기준으로 3.0.8 버전까지 나왔습니다. Tiles를 사용하기 위해서는 버전에 따라 몇가지 고려해야할 사항이 있는데요 대표적으로 JSTL, JDK, Servlet, JSP, Spring 버전을 체크해야만 합니다.

 

최신버전인 타일즈 3.0.8 기준으로 요구사항에 대하여 확인해 보겠습니다.

아래의 요구사항은 최소요구사항이 아닌 단순히 정상적으로 작동되는지 검증이 된 환경입니다.

 

- JSTL 필수

- JDK 1.8

- Servlet 2.5

- Spring 5.1.8

 

 

 

 

 

3. Maven Dependency 추가

 

	<!-- Tiles -->
	<dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-extras</artifactId>
            <version>3.0.8</version>
          </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>3.0.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>3.0.8</version>
        </dependency>

당연히 pom.xml을 통해서 라이브러리를 추가해줘야만 합니다.

 

 

 

 

 

4. Servlet-Context.xml 설정

 

    <!-- Tiles -->
    <beans:bean id="tilesConfigurer" 
                class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <beans:property name="definitions">
            <beans:list>
                <beans:value>/WEB-INF/tiles/tiles.xml</beans:value>
            </beans:list>
        </beans:property>
    </beans:bean>        
    <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>
    
    <!-- viewResolver 설정 (사용자 view의 위치, 확장명 설정) -->	
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <beans:property name="prefix" value="/WEB-INF/views/" />
      <beans:property name="suffix" value=".jsp" />
      <beans:property name="order" value="2" />
    </beans:bean> 

 

Tiles 주석문 부분은 타일즈에 대한 세팅입니다.

Tiles 세팅이 우선순위에 있어서 1순위 이기 때문에 아래의 코드를 통해 1순위로 지정을 해주었고

<beans:property name="order" value="1" />

 

기존의 viewResolver는 2순위로 지정해 주었습니다.

<beans:property name="order" value="2" />

 

한마디로 view(JSP파일)를 불러올 때 tiles를 우선순위로 두겠다는 소리입니다.

 

 

 

 

 

5. tiles.xml 파일 생성

 

<?xml version="1.0" encoding="UTF-8"?>
<!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>

	<!-- tiles 적용 -->
	<definition name="tilesLayout" template="/WEB-INF/jsp/layout/TilesLayout.jsp">
		<put-attribute name="siteTop" value="/WEB-INF/jsp/layout/SiteTop.jsp" />
		<put-attribute name="content" value="" />
		<put-attribute name="siteBottom" value="/WEB-INF/jsp/layout/SiteBottom.jsp" />
	</definition>
 
	<definition name="*.tiles" extends="tilesLayout">
		<put-attribute name="content" value="/WEB-INF/jsp/{1}.jsp" />
	</definition>
	
	<definition name="*/*.tiles" extends="tilesLayout">
		<put-attribute name="content" value="/WEB-INF/jsp/{1}/{2}.jsp" />
	</definition>
	
	
		
	<!-- 타일즈 미 적용 -->
	<definition name="normalLayout" template="/WEB-INF/jsp/layout/NormalLayout.jsp">
		<put-attribute name="NormalLayout" value="" />
	</definition>
	
	<definition name="*.jsp" extends="normalForm">
		<put-attribute name="NormalLayout" value="/WEB-INF/jsp/{1}.jsp" />
	</definition>
		
	<definition name="*/*.jsp" extends="normalForm">
		<put-attribute name="NormalLayout" value="/WEB-INF/jsp/{1}/{2}.jsp" />
	</definition>
	
</tiles-definitions>

 

tiles.xml에서는 컨트롤러에서 리턴한 String값에 따라 타일즈를 적용할지 말지를 결정하는 설정을 넣습니다. 위의 코드에서는 컨트롤러에서 리턴하는 String 값이 *.tiles일 경우 tiles적용을 *.jsp일 경우 적용을 안하도록 설정했으며 jsp마다 경로의 단계차이가 있을 수 있기 때문에 /*/*.tiles 처럼 몇가지 경로를 더 추가해줬습니다.

 

tiles.xml파일의 위치는 위에서 설정해주었던 경로에 위치시켜 주면 됩니다.

<beans:value>/WEB-INF/tiles/tiles.xml</beans:value>

 

 

 

 

 

6. Tiles Template 생성

 

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

<!DOCTYPE html>
<html lang="ko">

<body>
	<header id="siteTop">
		<tiles:insertAttribute name="siteTop"/>
	</header>

	<div id="content">
		<tiles:insertAttribute name="content"/>
	</div>
 
	<footer id="siteBottom">
		<tiles:insertAttribute name="siteBottom"/>
	</footer>
</body>
</html>

 

Tiles의 기본 탬플릿입니다. 경로는 위에서 설정한대로 web-inf - jsp - layouts - TilesLayout.jsp로 생성했습니다.

 

 

 

 

 

7. Tiles의 실행

 

	/* 타일즈 적용 */
	@RequestMapping(value = "index.do", method = RequestMethod.GET)
	public String test(Locale locale, Model model) {
		
		return "home.tiles";
	}
	
	
	/* 타일즈 미적용 */	
	@RequestMapping(value = "index.do", method = RequestMethod.GET)
	public String test1(Locale locale, Model model) {
		
		return "home.jsp";
	}

 

위의 코드는 컨트롤러 부분입니다. 위에서 세팅한 값을 기준으로 타일즈를 적용하는 코드와 적용하지 않는 코드를 작성해 봤습니다.

 

 

 

 

 

 

댓글