본문 바로가기
java

struts tiles : 스트럿츠 타일즈 사용하기^^

by 새로운 도전을 위한 한걸음 2015. 5. 10.

스트럿츠의 타일즈는  일반적인 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;

                           }

             }

}

/////////////////////////////////////////////////////////////

 

<FORM style="MARGIN: 0px" name=tagForm onsubmit=javascript:oCafeTagRead.updateArticleTag() method=post><INPUT type="hidden" value="11122560" name="clubid"> <INPUT type="hidden" value="348" name="articleid"> </FORM>