진행순서
① 사용자로부터 요청이 들어오면 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 2' 카테고리의 다른 글
struts 2 - 스트러츠2 + spring 연동하기 (2) | 2009.07.12 |
---|---|
struts 2 - JFree Chart plugin (0) | 2009.07.08 |
struts 2 - Interceptor (3) | 2009.07.06 |
struts 2 - properties 파일 (1) | 2009.07.05 |
struts 2 - upload & download (0) | 2009.07.05 |