스트럿츠로 로그인 시스템을 만들어보도록 합시다.
이번엔 TILES를 이용해서 레이아웃을 꾸며봅시다.
TILES는 JSP의 include와 비슷한 역할을 합니다.
jsp파일의 구성을 보도록 합시다.
index.jsp - 가장 처음 시작될 때 실행.
main.jsp - 메인화면이다. 이곳에 tiles를 이용해서 top, left, right, bottom을 insert하게 됨.(뭔말인지 모르지만 소스를 보면 쉽게 알 수 있다. top,left,bottom은 고정되어있으며 right페이지만 바뀐다.)
top.jsp - 맨 위에 제목을 나타내는 jsp파일.
bottom.jsp - 맨 아래에 저작권 같은 거 쓰는 jsp파일.
left.jsp - 왼쪽에 메뉴를 나타내는 jsp파일.
right.jsp - 오른쪽에 로그인 정보 및 환영메시지를 나타내는 jsp파일.
joinForm.jsp - 회원가입시 쓰이는 Form이 들어있는 jsp파일.
loginForm.jsp - 로그인시 쓰이는 Form이 들어있는 jsp파일.
modifyForm.jsp - 수정시 쓰이는 Form이 들어있는 jsp파일.
tiles를 사용하기 위해서는 struts-config.xml파일에 아래와 같은 plug-in 태그를 넣습니다.
struts-config.xml
[code]
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/config/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>
[/code]
tiles의 정의파일을 생성해서(tiles-defs.xml) 정의파일에는 다음과 같이 넣습니다.
tiles-defs.xml
[code]
<?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="/main.jsp">
<put name="title" value="회원관리시스템 ver 1.0"/>
<put name="top" value="/top.jsp"/>
<put name="left" value="/left.jsp"/>
<put name="right" value="/right.jsp"/>
<put name="bottom" value="/bottom.jsp"/>
</definition>
<definition name=".layout-login" extends=".layout-main">
<put name="right" value="loginForm.jsp"/>
</definition>
<definition name=".layout-join" extends=".layout-main">
<put name="right" value="joinForm.jsp"/>
</definition>
<definition name=".layout-modify" extends=".layout-main">
<put name="right" value="modifyForm.jsp"/>
</definition>
</tiles-definitions>
[/code]
내용은 간단합니다. 예를 들어서 .layout-main이라는 이름을 정의해서 각각의 title, top, left, right, bottom 이라는 이름에 해당 jsp파일을 넣는 그런뜻입니다.
아래 보면 extends라고 되어있는데 이것은 .layout-main에 있는 내용 그대로 받고 right부분만 put을 해서 그부분만 고치겠다는 그런 내용입니다.
자 이제 main.jsp를 한번 보도록 합시다.
main.jsp
[code]
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles"%>
<!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=EUC-KR">
<title><tiles:getAsString name="title"/></title>
</head>
<body>
<center>
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2"><tiles:insert attribute="top"/></td>
</tr>
<tr>
<td width="200" bgcolor="#eeeeee" valign="top">
<tiles:insert attribute="left"/></td>
<td width="300" bgcolor="#dddddd" valign="top">
<tiles:insert attribute="right"/></td>
</tr>
<tr>
<td colspan="2"><tiles:insert attribute="bottom"/></td>
</tr>
</table>
</center>
</body>
</html>
[/code]
tiles:insert해서 attribute값은 방금 정의파일에서 정의한 이름을 되어있습니. 매우 간단합니다.
자 이제 tiles를 사용하려면 RequestProcessor를 사용해야 합니다 (안 넣으면 안됩니다. 이유는모릅니다.--')
KoRequestProcessor.java
[code]
package membermanager.controller;
import java.io.UnsupportedEncodingException;
import org.apache.struts.tiles.TilesRequestProcessor;
import javax.servlet.http.*;
public class KoRequestProcessor extends TilesRequestProcessor{
protected boolean processPreprocess(HttpServletRequest request,
HttpServletResponse response) {
try {
// HTTP 파라미터의 인코딩을 설정한다.
request.setCharacterEncoding("euc-kr");
} catch (UnsupportedEncodingException e) {
// do nothing;
}
return true;
}
}
[/code]
이것은 잘보면 TilesRequestProcessor를 상속 받아서 정의되어 있습니다.
이것을 쓰기 위해서는 struts-config.xml에 이것을 추가해야 합니다.
<controller processorClass="membermanager.controller.KoRequestProcessor"/>
자 이제 보면 action은 어떻게 정의가 되어있는지 봅시다. tiles정의파일에 정의한 이름 그대로 액션시키면 됩니다.
<?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="/main.jsp">
<put name="title" value="회원관리시스템 ver 1.0"/>
<put name="top" value="/top.jsp"/>
<put name="left" value="/left.jsp"/>
<put name="right" value="/right.jsp"/>
<put name="bottom" value="/bottom.jsp"/>
</definition>
<definition name=".layout-login" extends=".layout-main">
<put name="right" value="loginForm.jsp"/>
</definition>
<definition name=".layout-join" extends=".layout-main">
<put name="right" value="joinForm.jsp"/>
</definition>
<definition name=".layout-modify" extends=".layout-main">
<put name="right" value="modifyForm.jsp"/>
</definition>
</tiles-definitions>
[/code]
내용은 간단합니다. 예를 들어서 .layout-main이라는 이름을 정의해서 각각의 title, top, left, right, bottom 이라는 이름에 해당 jsp파일을 넣는 그런뜻입니다.
아래 보면 extends라고 되어있는데 이것은 .layout-main에 있는 내용 그대로 받고 right부분만 put을 해서 그부분만 고치겠다는 그런 내용입니다.
자 이제 main.jsp를 한번 보도록 합시다.
main.jsp
[code]
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles"%>
<!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=EUC-KR">
<title><tiles:getAsString name="title"/></title>
</head>
<body>
<center>
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2"><tiles:insert attribute="top"/></td>
</tr>
<tr>
<td width="200" bgcolor="#eeeeee" valign="top">
<tiles:insert attribute="left"/></td>
<td width="300" bgcolor="#dddddd" valign="top">
<tiles:insert attribute="right"/></td>
</tr>
<tr>
<td colspan="2"><tiles:insert attribute="bottom"/></td>
</tr>
</table>
</center>
</body>
</html>
[/code]
tiles:insert해서 attribute값은 방금 정의파일에서 정의한 이름을 되어있습니. 매우 간단합니다.
자 이제 tiles를 사용하려면 RequestProcessor를 사용해야 합니다 (안 넣으면 안됩니다. 이유는모릅니다.--')
KoRequestProcessor.java
[code]
package membermanager.controller;
import java.io.UnsupportedEncodingException;
import org.apache.struts.tiles.TilesRequestProcessor;
import javax.servlet.http.*;
public class KoRequestProcessor extends TilesRequestProcessor{
protected boolean processPreprocess(HttpServletRequest request,
HttpServletResponse response) {
try {
// HTTP 파라미터의 인코딩을 설정한다.
request.setCharacterEncoding("euc-kr");
} catch (UnsupportedEncodingException e) {
// do nothing;
}
return true;
}
}
[/code]
이것은 잘보면 TilesRequestProcessor를 상속 받아서 정의되어 있습니다.
이것을 쓰기 위해서는 struts-config.xml에 이것을 추가해야 합니다.
<controller processorClass="membermanager.controller.KoRequestProcessor"/>
자 이제 보면 action은 어떻게 정의가 되어있는지 봅시다. tiles정의파일에 정의한 이름 그대로 액션시키면 됩니다.
<action path="/main"
forward=".layout-main"/>
forward=".layout-main"/>