'class diagram'에 해당되는 글 1건

  1. 2007.11.30 About Struts

Struts란?

 간단히 말하자면 MVC 모델을 적용한 J2EE APP.를 개발하기 위한 오픈소스 프레임웤이라고 할 수 있다. 주요 기능은 Controller 부분의 액션 매핑을 자동화해 주는 것이다. 주요 정보가 XML로 관리되기 때문에 개발자는 Action 클래스만 구현하면 된다. 또한 Struts를 사용하는 곳이라면 어디든 액션 클래스를 재사용 가능하다.

(Controller란 View 에서 발생한 사용자 요청을 적절히 분배하여 Model 에 넘겨주고, 그 응답을 다시 View 단에 분배하는 역할을 한다. J2EE 프레임웤에선 JSP가 뷰의 역할을, EJB가 Model의 역할을 하며, Struts를 사용하지 않는다면 직접 작성한 Servlet 클래스와 Action 클래스가 Controller의 역할을 한다.)

Action Mapping

 Struts의 가장 중요한 기능인 Action Mapping에 대하여 알아보자. Strust를 사용하지 않고 서블릿 만으로 컨트롤러를 만들면 어쩔 수 없이 액션의 요청 경로와 액션 클래스, 그리고 응답 페이지를 맵핑하는 코드가 자바 코드안에 들어간다. 하지만 Struts에서는 이 모든 정보가 XML 파일안에 정의된다.

(참고로 Struts의 모든 설정은 struts-config.xml 안에 위치한다. 이 글의 모든 xml 코드도 struts-config.xml에 위치하는 것이다.)

<action path="/addReply"
   type="com.sds.jblog.view.reply.action.AddReplyAction">
   <forward name="success" path="/toMyBlog.do" redirect="true" />
    <forward name="fail" path="/common/error.jsp" />
</action>
  • action element : 하나의 액션에 대응

    • path attribute :  요청 경로. 맨 앞의 슬래쉬(/)를 빼먹지 않도록 주의. 만약 주소 뒤의 접미사(*.do)를 web.xml의 서블릿 필터에 등록해 두었다면 접미사는 생략 가능하다.
    • type attribute : 요청에 대응된 액션 클래스 지정
  • forward element :  응답 결과와 응답 페이지 매핑

    • name attribute : 응답 결과 식별을 위한 속성. 예를 들어 응답 결과(success/fail/...)에 따라 다른 페이지로 이동할 수 있다.

    •  path attribute : 응답 페이지(html/jsp/action/...) 주소

    • redirect attribute : true이면 redirect 방식으로 페이지 이동, false이면 forward방식으로 페이지 이동. 생략시 false가 디폴트 값으로 설정됨

Action Class

 위와 같이 액션 매핑 정보를 파일에 설정한 후 실제 액션 클래스를 작성한다. 액션 클래스는 Struts 라이브러리 안에 포함된 AbstractAction 클래스를 상속받아야 하며, execute 메서드를 오버라이드하여 액션 호출시 실행될 내용을 구현하면 된다.

public class ConcreteAction extends AbstractAction {
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response

     throws Exception { 
      // 1.request나 ActionForm를 이용하여 요청 파라미터를 얻어온다.
      ... 
      // 2.얻어온 파라미터를 VO 객체에 세팅한다.
       ... 

// 3.VO 객체를 EJB로 넘겨주어 비즈니스 로직을 수행한다.
... 
// 4.수형 결과에 따라 적당한 ActionForward를 리턴한다.
if(sucess) return mapping.findForward("success"); 
else if(fail) return mapping.findForward("fail"); 
else if(other) return mapping.findForward("other");
...
}
}

Action Form

 Action Form은 Struts에서 제공하는 부가기능으로 요청 파라미터의 값을 자동으로 얻어오는 역할을 한다. 보통 서블릿 상에서 요청 파라미터를 얻어오려면 다음과 같은 노가다 코딩이 필요하다.

String param1 = request.getParameter("param1");
String param2 = request.getParameter("param2"); 
String param3 = request.getParameter("param3"); 
...

 그러나 Avtion Form 을 이용하면 단 한줄의 코딩도 필요가 없다.

  먼저 사용할 파라미터들과 똑같은 이름의 변수를 멤버로 갖는 폼 클래스를 ActionForm 클래스를 상속받아 생성하고 각 멤버 변수의 getter/setter method를 생성한다. (메소드 이름도 규칙을 지켜야 한다.)

public class ConcreteForm extends ActionForm { 

private String param1; 
private String param2;  
private String param3;  
... 
public String getParam1() {
  return param1;
 }
 public void setParam1(String param1) {
  this.param1 = param1;
 } 
}

 그리고 이렇게 생성한 폼 클래스를 xml 파일에 선언하여 Struts가 참조할 수 있도록 한다.

<form-beans>
  <form-bean name="concreteForm1"
   type="com.sds.form.concreteForm1">
  </form-bean>
 
  <form-bean name="concreteForm2"
   type="com.sds.form.concreteForm2">
  </form-bean>

  <form-bean name="concreteForm3"
   type="com.sds.form.concreteForm3">
  </form-bean>
  ...
 </form-beans>

 이제 선언한 폼 클래스를 사용하겠다고 명시한다. 앞서 설명한 액션 매핑 xml에서 action element에 몇가지 attribute를 추가한다. name attribute에 위에서 선언한 폼의 이름을 지정하고 scope attribute에 폼 클래스의 범위를 지정한다. 보통은 request로 하는 것이 적합하다.

<action path="/concreteAction1"
         type="com.sds.action.concreteAction1"
         name="concreteForm1"
         scope="request">
         <forward name="success" path="/result.jsp"/>
         <forward name="fail" path="/fail.jsp"/>
        </action>

 여기까지 마치면 액션 클래스의 execute메소드로 인자 form이 넘어온다. 만약 이 폼객체의 데이터를 VO객체로 카피하고자 한다면, 폼 클래스와 같은 형식의 VO 클래스를 만든후 다음과 같이 하면 된다.

BeanUtils.copyProperties(vo, form);

전체 Class Diagram
사용자 삽입 이미지

사용 순서 정리

1.Struts 공식 페이지에서 라이브러리 다운
2.JAVA_HOME 밑에 압축 해제
3.프로젝트에 Struts 라이브러리 임포트
4.web.xml에 ActionServlet을 지정한다.
5.설계된 페이지/액션 매핑을 struts-config.xml에 추가
6.필요하다면 폼 클래스 정의
7.액션 클래스 구현

'Wheel's Tech Zoom > J2EE Overview' 카테고리의 다른 글

[iBATIS #1] What is iBATIS?  (0) 2007.12.06
About Struts  (0) 2007.11.30
Posted by OnTheWheel

댓글을 달아 주세요