Java2EE Framework/Struts1.3

스트럿츠1.3 - 스트럿츠의 액션(컨트롤러) 종류

본클라쓰 2010. 5. 29. 07:11

 

스트럿츠 설정 파일(struts-config.xml) 에 action 태그를 사용하여 등록하며, 일반적으로 다음과 같이 컨트롤러를 등록한다.

 

<action path="/login" type="org.apache.struts.actions.LoginAction" name="loginForm" scope="request" parameter="/hr/login.jsp" validate="false" />

 

<action path="/login" type="org.apache.struts.actions.LoginAction" name="loginForm" scope="request" input="/hr/login.jsp">

    <forward name="success" redirect="false" path="/common/loginSuccess.jsp" />

    <forward name="fail" redirect="false" path="/common/message.jsp" />

    <forward name="retry" redirect="false" path="/common/login.jsp" />

</action> 

 

 위와 같은 방법만 있는 것이 아니라 다른 형태의 Action 도 등록할 수 있습니다.

 

 

 

1. forwardAction

 

 요청을 다른 페이지로 포워드 시키기 위한 스트럿츠의 액션입니다. 

<action path="/login" parameter="/login.jsp" type="org.apache.struts.actions.ForwardAction" />

 or

<action path="/login" forward="/login.jsp" />

 

 

2. includeAction

 

 포워드 액션과 비슷하지만 작용을 하지만 인크루드 액션은 제어권을 다시 가지고 온다는 것이 포워드 액션과의 차이점입니다.

<action path="/login" parameter="login.jsp" type="org.apache.struts.actions.IncludeAction" />

or

<action path="/login" include="login.jsp" /> 

 

 

3. DispatchAction

 

 앞에서의 Action은 하나의 단위 동작만을 처리하는 Action 클래스이지만 DispatchAction 클래스는 여러 개의 작은 Action 들을 하나의 클래스에 모으는 역할을 합니다. 간혼 하나의 업무에 작은 단위의 Action이 너무 많은 경우 Action의 소스들을 관리하기도 어렵고 동일한 기능을 하는 메소드들이 중복되는 경우도 있을 수 있습니다. 이럴 때 DispatchAction 을 사용합니다.

 

 

DispatchAction 클래스를 구현하는 방법

패키지, 임폴트 생략

 

public class EmployeeDispatchAction extends DispatchAction {

 

    public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception  {

        ... 작은 액션 수행 코드 ...

        return mapping.findForward("result"); 

    } 

 

    public ActionForward sub(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception  {

        ... 작은 액션 수행 코드 ...

    } 

 

 

스트럿츠 설정 파일에 DispatchAction 클래스 등록방법

<action path="/employee" name="employee" input="/hr/employee.jsp" parameter="method" scope="request"

        type="패키지.EmployeeDispatchAction" validate="false">

    <forward name="result" path="/employee/result.jsp" />

</action> 

 이 때 method 값에 해당하는 메소드를 호출합니다. 만약, method값에 add가 들어오면 add() 메소드를 호출하고 sub로 들어오면 sub() 메소드를 호출합니다.