Just do IT
Published 2021. 7. 9. 14:31
Spring - Tiles Programing/기타

Tiles란?

Include와 비슷한 역할이라고 할 수 있다.

페이지의 상단이나 하단 메뉴(header, footer)와 같이 모든 페이지에 반복적으로 사용해야 하는 경우 <include>태그를 사용하여 넣으면 간편하게 넣을 수 있다.

 

하지만 Include의 경로가 바뀌었을 때, 모든 페이지를 하나씩 다 들어가서 경로를 수정해야 하는 문제점이 있다. 가령 페이지가 50개가 된다면 50개의 페이지에 있는 include 경로를 전부 다 바꾸어 주어야 하는 것이다.

 

Tiles는 Include와 같이 상단, 하단 메뉴를 반복적으로 넣을 때 사용할 수 있는 방법이며 Include처럼 모든 페이지에서 일일이 수정하지 않고 tiles.xml에서 한번의 수정으로 모든 페이지에 적용할 수 있다.

 

사전 준비

pom.xml 라이브러리 추가

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

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

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

<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-extras</artifactId>
	<version>${org.apache.tiles-version}</version>
</dependency>

tiles 버전은 본인에게 맞는 버전으로 사용하시면 됩니다.

아래 링크로 들어가서 Tiles 관련 라이브러리 4개 전부 추가해주시면 됩니다.

https://mvnrepository.com/search?q=tiles

< Tiles JSP Support, Tiles Servlet Support, Tiles Core Library, Tiles API >

 

servlet-context.xml

<beans:bean id="viewResolver" 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 설정 -->
<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/spring/tiles.xml</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

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

tiles가 우선순위가 되도록 order의 value를 1로 지정해주어야 하며

viewResolver의 순위를 2로 맞추어 주면 됩니다. 

(tiles로만 view를 할거라면 viewResolver는 주석처리해도 됩니다)

<beans:value></beans:value>는 tiles.xml 파일의 위치 경로입니다

 

용어 및 사용

Template : 페이지 레이아웃을 의미하며, jsp파일로 페이지의 기본 골격을 구성하고 각 페이지의 실제 구성 내용은 definition에서 설정되는 Attribute(실제 내용)태그를 사용하여 런타임 시 뿌려준다

 

 <tiles-definitions> </tiles-definitions>

여러가지 레이아웃을 추가하기 위한 태그

 

하나의 페이지 일 경우 - 헤더, 푸터, 메뉴 등 없이 single

<definition name="sample.base.board" template="/WEB-INF/views/sample/board.jsp">
	<put-attribute name="body" value="" />
</definition>

 

헤더, 푸터, 메뉴 등 여려가지 include 할 경우

<definition name="web.base.main" template="/WEB-INF/views/front/web/layout/allLayout.jsp">
	<put-attribute name="header" value="/WEB-INF/views/front/web/layout/header.jsp" />		
	<put-attribute name="body"   value="" />
	<put-attribute name="footer" value="/WEB-INF/views/front/web/layout/footer.jsp" />
</definition>

 

▶ <definition name="" template=""> </definition>

name : Controller에서 사용할 이름(URL value)

template : 헤더, 푸터, 바디 등을 적용시키기 위해 만들어놓은 뼈대 jsp 파일의 경로

(없으면 안 적어도 된다)

 

 <put-attribute name="body"   value="body.jsp" />

name : 하나의 jsp를 사용하기 위한 것 (single 레이어로 body를 한뒤

definition name과 attribute name 이름으로 원하는 레이아웃을 넣을 수 있다)

value : 사용할 jsp 풀 네임(전체 경로)

 

▶ 위와 같이 header, footer를 같이 할 경우 body 부분의 값만 변경되기 때문에 body 부분의 내용은 아래와 같이 사용하면 된다.

<definition name="front/web/*.main" extends="web.base.main">	    
	<put-attribute name="body" value="/WEB-INF/views/front/web/body.jsp" />
</definition>

▶ Controller에서 front/wet/*.main을 호출하면 web.base.main의 body 부분에 들어감과 동시에 web.base.main의 레이아웃을 불러오게 된다.

                                           

예상되는 에러

'org.springframework.web.servlet.view.tiles3.TilesConfigurer' not found

   ▶ 원인 : springframework의 버전이 낮아서 tiles3를 사용할 수 없어서 생기는 오류

               3.1.1.RELEASE에서는 tiles 3를 사용할 수 없다. 3.2 이상이여야 tiles 3 사용 가능

   ▶ 해결 : 버전을 올려주면 된다

               프로젝트 폴더 우클릭 -> MAVEN -> Update project 클릭

               프로젝트 업데이트 후 -> Project -> 클린

               springframework와 tiles의 버전이 맞으면 에러가 사라진다

'Programing > 기타' 카테고리의 다른 글

주석의 정의와 종류  (0) 2022.12.05
페이징 - AJAX (2)  (0) 2021.07.16
페이징 - AJAX (1)  (0) 2021.07.13
페이징 - MSSQL  (0) 2021.07.13
profile

Just do IT

@AmyG

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!