진행순서
① 사용자로부터 요청이 들어오면 Interceptor를 지나 Action 에서 Business Logic을 수행 후
    action mapping 에의해 result로 결과가 보내지게 된다.
② 이때 result 의 type="tiles" 로 설정하게 되면 Result에서는 web.xml에 설정한 Tiles Listener를 수행하고
    WEB-INF 폴더 아래에 있는(web.xml 파일과 경로가 같은) tiles.xml(tiles의 설정이 들어있는 xml파일을 로딩한다.)
   이름은 어떠한 것이라도 상관 없다
③ 그 결과를 다시 Interceptor에 전달하여 사용자로 결과를 보내주게 된다.

작업순서
1) Tiles Plug-in을 수행하기 위한 Library파일을 설정한다.
    struts 2의 스펙에 있는 다음의 Library파일을 추가 한다.
commons-digester-1.8.jar              :  플러그인을 사용하기 위해서 꼭 필요한, 플러그인을 이용하겠다고 정의해주는 Library
struts2-tiles-plugin-2.0.14.jar           :  아래서부터는 tiles를 사용하기 위한 library 
tiles-api-2.0.4.jar
tiles-core-2.0.4.jar
tiles-jsp-2.0.4.jar

2) web.xml 파일에 Tiles Listener를 설정한다.
<listener>
    <listener-class>
      org.apache.struts2.tiles.StrutsTilesListener 
    </listener-class>
</listener> 

3) Tiles의 설정이 들어있는 tiles.xml파일을 생성(파일의 이름은 아무거나 상관이 없으며 WEB-INF폴더 에 있어야 한다.)
 <?xml version="1.0" encoding="EUC-KR" ?>

<!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>
    <definition name="index" template="/tiles/classicLayout.jsp">
        <put-attribute name="title"  value="Struts2 Tiles Example"/>
        <put-attribute name="menu"   value="/tiles/menu.jsp"/>
        <put-attribute name="header" value="/tiles/header.jsp"/>
        <put-attribute name="body"   value="/tiles/body.jsp"/>
        <put-attribute name="footer" value="/tiles/footer.jsp"/>
    </definition>
   
    <definition name="menu1" extends="index">
            <put-attribute name="body"   value="/tiles/body-menu1.jsp"/>
    </definition>
 
   <definition name="menu2" extends="index">
        <put-attribute name="body"   value="/tiles/body-menu2.jsp"/>
    </definition>
</tiles-definitions>

template로 설정한 jsp페이지는 기본레이아웃이 되는, 즉 index 파일이라고 말할수 있다.

하위 정의로 부터 menu1일때는 상단에 선언한 index 에서 body부분만 다음과 같은 jsp페이지로 변경하겠다는 뜻이다.

4) action mapping을 수행한다.(tiles.xml이라는 파일에서 action mapping을 수행한다.)

 <struts>
    <package name="tiles" namespace="/tiles" extends="struts-default, tiles-default">
        <action name="index">
            <result type="tiles">index</result>
        </action>
        <action name="menu1">
            <result type="tiles">menu1</result>
        </action>
        <action name="menu2">
            <result type="tiles">menu2</result>
        </action>
    </package>
</struts>
extends="tiles-default" : tiles 에서 기본적으로 사용하는 Interceptor를 수행하겠다는 설정으로 다음의 설정을 꼭해주어야
                                  Tiles를 사용할 수 있다.

만약 주소창에 index.action으로 들어오면 action name="index" 가 수행한다.
그리고는 result type="tiles" 인것을 확인하고 tiles설정이 되어있는 곳으로가 줄쳐진 index라는 곳으로 이동한다.
즉 위의 index는 tiles설정이 들어가 있는 tiles.xml(web.xml과 같은 경로에 있는 tiles설정 파일)로 들어가
definition name="index" 인것을 찾아 들어가 실행 시킨다.

5) jsp의 레이아웃 설정(tiles에서 지원하는 tag library를 통해 jsp페이지 끼워 넣을 수 있다.)
<%@ taglib prefix="tiles"  uri="http://tiles.apache.org/tags-tiles"%>
<tiles:getAsString name="title" />
<tiles:insertAttribute name="header"/>
tiles-difinition 문서에서 이름이 title인것을 찾아 문자 형으로 리턴해 준다.
즉 <put-attribute name="title"  value="Struts2 Tiles Example"/>이기 때문에 결국 화면엔 "Struts2 Tiles Example" 이렇게 출력 된다.
<put-attribute name="header" value="/tiles/header.jsp"/>
이렇게 설정되어 있기 때문에 header.jsp가 입력이 된다.

출처 : http://javastore.tistory.com/

Posted by 미스터네오
,