스트럿츠의 타일즈는 일반적인 JSP의 INCLUDE 구문과 많은 부분이 닮아있다.
하지만 INCLUDE 구문은 각각의 JSP 페이지마다 <%@ include file=”../*.jsp” %>
사용해서 페이지 리소스의 재 사용 성을 높인다. 하지만 이 경우 LAYOUT 에 조정이 필요한경우 모든 페이지의 구성을 수동으로 바꾸어 주어야 한다.
타일즈에서는 이를 최상단에 layout을 설정한 템플릿을 두고 이를 이용하여 레이아웃의 변경만으로 모든 페이지를 변경할 수 있도록 하여 재 사용성 을 높인다.
TILES 설정하기
WEB_INF 안에 struts-tiles.tld 와 tiles-config.dtd 를 놓는다.
WEB-INF/lib 안에는 tiles.jar
Commons-digester.jar
Commons-beanutils.jar
Commons-collections.jar
Commons-logging.jar 를 놓는다.
모두 스트럿츠 1.1 패키지 안에 들어있다.
스트럿츠를 사용하고있다면 아마 모두 설치되어있을것이다.
스트럿츠에 서 타일즈를 사용하기위해서는 페이지의 상단에
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
를 선언하여 타일즈 테그를 사용해주면된다.
하지만 타일즈 difinitions를 사용하면 보다 쉽게 화면을 구성할수있다.
타일즈 difinitions를 사용하기 위해서는 struts-config.xml 에 타일즈 설정화일의
정보를 입력해주어야한다.
//////////////////////////////////////////////////////////////////////////////////////////////
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
<set-property property="definitions-debug" value="2" />
<set-property property="definitions-parser-details" value="2" />
<set-property property="definitions-parser-validate" value="true" />
</plug-in>
/////////////////////////////////////////////////////////////////////////////////////////////////////
가장상위의 definitions-config만 설정해주면 되지만 밑의 디버그 정보들도 같이 써주자.
LAYOUT 템플릿 정의하기
///////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html;charset=euc-kr"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<html:html>
<head>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" >
<tr>
<td class ="header" colspan="2">
<tiles:insert attribute = "header" /> ßattribute값을
</td> 이용해 페이지
</tr> 의삽입부분을설정
<tr>
<td class="navigation" valign="top" width="10%">
<tiles:insert attribute = "navigation" />
</td>
<td class="content" align="center" width="90%">
<p>
<tiles:insert attribute = "content" />
<p>
<p>
<p>
</td>
</tr>
<tr>
<td class="footer" colspan="2" >
<tiles:insert attribute = "footer" />
</td>
</tr>
</table>
</body>
</html:html>
///////////////////////////////////////////////////////////
템플릿은 /WEB-INF/tiles-defs.xml 과 같이 생성되어있다 . xml파일에 definition정보를 설정한다.
///////////////////////////////////////////////////////////
<definition name="com.hunn.index" path="/form/layout.jsp">
<put name="header" value="/form/main_top.jsp" />
<put name="navigation" value="" />
<put name="content" value="main_middle.jsp" />
<put name="footer" value="/form/main_bottom.jsp" />
</definition>
<definition name="com.hunn.index.pds_board" extends="com.hunn.index">
<put name="content" value="/pds_board/form/board_list.jsp" />
</definition>
///////////////////////////////////////////////////////////
다음과 같이 놓으면 위의 레이아웃 페이지 의 attribute값의 부분마다 xml 파일에서
설정한 페이지 리소스가 들어가게된다.
Difinition은 이외에도 자바와같이 상속의 개념을 이용해 보다 동적인 리소스의 이용이 가능하게되었다.
보면 dinition name com.hunn.index.pds_board는 com.hunn.index를 상속받는다.
상속받은 com.hunn.index.pds_board은 com.hunn.index의속성을 모두 가지며
put태그를 통해 원하는 부분만을 오버라이드 해서 변경할수있다.
그럼 jsp 페이지에서는 definition 설정을 불러옴으로서 JSP 소스와 콘텐츠를 완벽하게 분리하여 재사용할수있다.
/////////////////////////////////////////////////////////////
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%>
<% String login = (String)session.getAttribute("login"); %>
<html:html>
<head>
</head>
<body>
<tiles:insert definition="com.hunn.index" flush="true" />
</body>
</html:html>
/////////////////////////////////////////////////////////////
% 만약 안될경우에는
RequestProcessor를 타일즈 TilesRequestProcessor로 확장해야한다.
/////////////////////////////////////////////////////////////
import org.apache.struts.tiles.TilesRequestProcessor;
public class myRequestProcessor extends TilesRequestProcessor {
protected boolean processPreprocess(
HttpServletRequest request,
HttpServletResponse response)
{
try{
request.setCharacterEncoding("euc-kr");
return true;
}catch (Exception e){
return false;
}
}
}
/////////////////////////////////////////////////////////////