이번엔 클래스 구조에 대해서 설명하겠습니다.

membermanager - actions : Action클래스
                        - beans : bean과 process클래스
                        - controller : RequestProcessor있는 곳
                        - jdbcdriver : dbcp을 사용하기 위해 만든 클래스

action클래스
loginAction - 로그인을 하기 위한 Action클래스
joinAction - 회원가입을 하기 위한 Action클래스
logoutAction - 로그아웃을 하기 위한 Action클래스
deleteAction - 회원탈퇴를 하기 위한 Action클래스
modifyAction - 회원수정을 하기 위한 Action클래스
modifyformAction - 회원수정을 위한 자료를 가져오기 위한 Action클래스

bean, process클래스
MemberInfoBean - 회원정보 빈
MemberManagerProcess - Process클래스로 Login, Join, Modify, Delete 등의 Action에서 사용될 메소드를 정의해 놓은 클래스

controller(RequestProcessor)클래스
KoRequestProcessor - 잘은 모르겠지만 한글가능하게 하고 타일즈 사용하게 하는 거 같습니다-_-;

jdbcdriver클래스
DBCPInit - 커넥션풀을 이용하기 위해 정의한 클래스(나중에 설명)

이런식으로 구조가 되어 있습니다.
struts-config.xml파일을 봅시다.

struts.config.xml
[code]
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
   
    <form-beans>
   
        <form-bean  name="DynaForm"
                    type="org.apache.struts.action.DynaActionForm">
            <form-property name="id" type="java.lang.String"/>
            <form-property name="pwd" type="java.lang.String"/>
            <form-property name="name" type="java.lang.String"/>
            <form-property name="ssn" type="java.lang.String"/>
            <form-property name="email" type="java.lang.String"/>
            <form-property name="phone" type="java.lang.String"/>
        </form-bean>
       
    </form-beans>

    <action-mappings>
   
        <action path="/welcome"
                forward="/index.jsp"/>
       
        <action path="/main"
                forward=".layout-main"/>
               
        <action path="/loginForm"
                forward=".layout-login"/>
       
        <action path="/joinForm"
                forward=".layout-join"/>
               
        <action path="/modifyForm"
                type="membermanager.actions.modifyformAction">
            <forward name="success" path=".layout-modify" />
        </action>
               
        <action path="/login" type="membermanager.actions.loginAction"
              name="DynaForm"
              scope="request"
              validate="true"
              input="/loginForm.do">
            <forward name="success" path="/main.do" redirect="true"/>
            <forward name="fail" path="/loginForm.do" />
        </action>
       
        <action path="/join" type="membermanager.actions.joinAction"
              name="DynaForm"
              scope="request"
              validate="true"
              input="/joinForm.do">
            <forward name="success" path="/main.do" redirect="true"/>
            <forward name="fail" path="/joinForm.do" />
        </action>
       
        <action path="/modify" type="membermanager.actions.modifyAction"
                name="DynaForm"
                scope="request"
                validate="true"
                input="/modifyForm.do">
            <forward name="success" path="/main.do"/>
            <forward name="fail" path="/modifyForm.do" />
        </action>
       
        <action path="/delete" type="membermanager.actions.deleteAction">
            <forward name="success" path="/main.do"/>
        </action>
       
        <action path="/logout"
                type="membermanager.actions.logoutAction">
            <forward name="success" path="/main.do" redirect="true"/>
        </action>

    </action-mappings>
   
    <controller processorClass="membermanager.controller.KoRequestProcessor"/>
   
    <message-resources parameter="membermanager.resources.application" />
   
    <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>
   
</struts-config>
[/code]
다음과 같이 action-mappings를 설정합니다. 예를 들어 login.do를 사용하게 되면 loginAction을 실행하는데 DynaForm을 사용하며 success를 forward하면 main.do로 가고 fail을 받으면 다시 loginForm으로 가는 그런 Action으로 구성되어 있습니다.

여기서 DynaForm은 동적 폼을 말합니다. 전에는 Form을 Action하 위해서는 ActionForm을 사용했는데 DynaActionForm을 사용하게 되면 따로 클래스를 제작하지 않아도 struts-config.xml에서 직접 값을 전달하게 됩니다.

Action클래스를 한개만 열어서 설명해봅시다-_-;(다하면 빡쎄니까-_-;)
[code]
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionMessage;

import membermanager.beans.MemberManagerProcess;

public class loginAction extends Action{

    public ActionForward execute(   ActionMapping mapping,
                      ActionForm form,
                      HttpServletRequest request,
                      HttpServletResponse response) throws Exception{
     
        DynaActionForm loginForm = (DynaActionForm)form;
        ActionMessages errors = new ActionMessages();
        MemberManagerProcess mmp = new MemberManagerProcess();
       
        // 폼에서 id와 pwd를 받아옴.
        String id = (String)loginForm.get("id");
        String pwd = (String)loginForm.get("pwd");
       
        if (id.equals("")) {
            errors.add("requiredID",new ActionMessage("error.id.required"));
        }
       
        if (pwd.equals("")) {
            errors.add("requiredPassword",
                             new ActionMessage("error.password.required"));
        }
       
        // Process클래스에서 Login을 실행해서 결과값을 리턴
        int result = mmp.Login(id, pwd);
           
        // 결과값에 따라 에러메시지설정.
        if (result == 0) {
            HttpSession session = request.getSession();
            session.setAttribute("id", id);
            return mapping.findForward("success");
        }
        else if (result == 1) {
            errors.add("invalidPassword",
                           new ActionMessage("error.password.invalid"));
        }
        else if (result == 2) {
            errors.add("invalidID", new ActionMessage("error.id.invalid"));
        }
       
        //에러를 저장.
        saveErrors(request,errors);
       
        return mapping.findForward("fail");
    }
}
[/code]

주석에다가 다 설명해 놨습니다. 폼에 있는 내용을 검증하기 위해서는 DynaActionForm에서 제공하는 get메소드를 통해 폼값을 얻어옵니다. 그래서 검사하면 되는 겁니다.

 
Posted by 머드초보
,
 

로그인 시스템 테스트경로입니다.
http://mudchobo.tomeii.com/MemberManager/


로그인 시스템 소스파일입니다.




이클립스 프로젝트로 포함했습니다.

이클립스 WTP 2.0 + TOMCAT 5.5 + JDK 5.0 에서 테스트했습니다.

 
Posted by 머드초보
,