본문 바로가기

FrameWork/Struts

struts 2 - Tiles Plug in



진행순서

① 사용자로부터 요청이 들어오면 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-difinition 문서에서 이름이 title인것을 찾아 문자 형으로 리턴해 준다.
즉 
               <put-attribute name="title"  value="Struts2 Tiles Example"/>
이기 때문에

결국 화면엔
"Struts2 Tiles Example" 이렇게 출력 된다.

<tiles:insertAttribute name="header"/>

이것도 마찬가지로 tiles-difinition 문서에서 header인 것을 찾아와 insert시킨다. 즉 다음의 태그가 입력된 곳에

                <put-attribute name="header" value="/tiles/header.jsp"/>
이렇게 설정되어 있기 때문에 header.jsp가 입력이 된다.

'FrameWork > Struts' 카테고리의 다른 글

Struts2 Guide site  (0) 2009.07.24