struts1 - Tiles plug-in

Published on: 2009. 7. 1. 21:05 by louis.dev

스트럿츠 1에서는 사용할 수 있는 플러그인은 두개 밖에 없다. validator plug-in과 Tiles plug-in이 그 두가지 이다.
Tiles는 중복되는 웹페이지의 레이아웃을 간단한 설정파일을 통해 쉽게 설정할 수 있고 기존에 include로 페이지를 삽입했을때 보다 유지 보수성이 뛰어나다는 장점을 가지고 있다.

작업 순서
1) strust-tiles-1.3.10.jar파일을 라이브러리에 추가 시킨다.

2)tiles-defs.xml파일을 설정한다.

---------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>

 <!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">

<tiles-definitions>
    <definition name=".layout-main"
                path="/tilesModule/classicLayout.jsp">     <!-- 다음과 같은 path로 찾아 들어왔을때 웹페이지의 설정을 한다. 실제 적으로 classicLayout.jsp파일에서 tiles 테그라이브러리를 통해 include할때  아래의 이름으로 include 시키게 된다.-->
        <put name="title"  value="struts framework tiles examples"/>  <!-- title이란이름으로 들어갈 value를 설정 -->
        <put name="header" value="/tilesModule/header.jsp"/>          <!-- jsp페이지에서 header란 이름으로 include했을때 다음의 jsp 페이지를 include 한다. -->
        <put name="menu"   value="/tilesModule/menu.jsp"/>
        <put name="body"   value="/tilesModule/body.jsp"/>
        <put name="footer" value="/tilesModule/footer.jsp"/>
    </definition>
   
    <definition name=".layout-menu1" extends=".layout-main">           <!-- extends: original페이지의 definition 이름을 설정한다. -->
        <put name="body" value="/tilesModule/body-menu1.jsp"/>
    </definition>
   
    <definition name=".layout-menu2" extends=".layout-main">
        <put name="body" value="/tilesModule/body-menu2.jsp"/>
    </definition>
</tiles-definitions>

---------------------------------------------------------------------------------------

3) layout page 생성

---------------------------------------------------------------------------------------
<%@page contentType="text/html; charset=euc-kr"%>
<%@ taglib prefix="tiles" uri="http://struts.apache.org/tags-tiles"%>
<%@ taglib uri="
http://struts.apache.org/tags-html" prefix="html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title><tiles:getAsString name="title" /></title>
        <html:base/>
    </head>
    <body>
 <h1><tiles:getAsString name="title"/></h1>
    <table border=0 cellpadding=0 cellspacing=1 bgcolor="#a0a0a0" width="100%">
        <tr valign="middle" bgcolor="#ffffff">
            <td colspan=2><tiles:insert attribute="header"/></td>
        </tr>
        <tr height="400" bgcolor="#ffffff">
            <td valign="top"  width="15%">
               <tiles:insert attribute="menu"/>
            </td>
            <td valign="middle" align="center">
               <tiles:insert attribute="body"/>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td colspan=2><tiles:insert attribute="footer"/></td>
        </tr>
    </table>
    </body>
</html>

---------------------------------------------------------------------------------------
위에 처럼 테그라이브러리를 선언하고 tiles 테그라이브러리로 다음의 페이지를 입력할 수 있다.
getAsString은 tiles-defs.xml파일에서 설정한 곳으로 들어가 name을 찾아 스트링을 입력한다.
insert는 tiles-defs.xml파일에서 선언한 jsp페이지를 삽입한다.

4) struts-tilesModule.xml에 plug-in설정
<plug-in className="org.apache.struts.tiles.TilesPlugin">
  <set-property property="definitions-config"  value="/WEB-INF/tiles-defs.xml” /> <!-- tiles-defs파일 위치 설정-->
<!-- 여기서 부터 옵션 -->
  <set-property property="definitions-debug" value="2" /> <!--디버그 수위 value=0 사용안함 value = 2보통 value = 5 max -->
  <set-property property="definitions-parser-details" value="2" />
  <set-property property="definitions-parser-validate" value="true" />
</plug-in>

5) struts-tilesModule.xml 에 action-mapping설정
<action path="/main"  forward=".layout-main" />
<action path="/menu1" forward=".layout-menu1" />
<action path="/menu2" forward=".layout-menu2" />

<controller processorClass="info.process.InfoRequestProcessor"/>
※ processortClass는 반드시 TilesRequestProcessor타입이어야 한다.


6) Request processor class생성
package com.myhome.info.processor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.tiles.TilesRequestProcessor;
public class InfoRequestProcessor extends TilesRequestProcessor{

 @Override
 /* Action으로 호출하기 전 처리할 내용을 기술하는 부분입니다. */
 protected boolean processPreprocess(HttpServletRequest request,
   HttpServletResponse response) {
  
  //form parameter에 대한 인코딩을 수행한다.
  boolean flag = false;
  try{
   request.setCharacterEncoding("euc-kr");
   flag = true;
  }catch(java.io.UnsupportedEncodingException uee){};
  
  return flag;
 }
 
}
request processor class를 tilesReqeustProcessor가 상속하고 있다.