STRUTS Framework - 2. Struts 분석 Frameworks

[Struts Use Case]


[Action 예제]



[웹 애플리캐이션의 web.xml 설정]

<?xml version="1.0" encoding="UTF-8"?>
<web-app>   
 <servlet>       
  <servlet-name>action</servlet-name>       
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>       
  <init-param>           
   <param-name>config</param-name>           
   <param-value>/WEB-INF/struts-config.xml</param-value>       
  </init-param>       
                                  :
                                 중략
                                  :
  <load-on-startup>1</load-on-startup>   
 </servlet>   
 <servlet-mapping>       
  <servlet-name>action</servlet-name>       
  <url-pattern>*.do</url-pattern>   
 </servlet-mapping>
</web-app>

ActionServlet에는 여러 개의 초기 인자를 전달할 수 있다. 그 중 유독 눈에 띄는 부분은 struts-config.xml을 초기
인자로 전달 한다는 것이다. 이 의미는 만약 struts-config.xml이외에 다른 이름으로 스트럿츠 설정 파일을 사용하고
싶다면 web.xml에서 변경해 주면 다. 또 하나 다른 점은 태그를 사용한다는 것이다. 이 태그의 의미는 애플리케이션이
시작할 때 ActionServlet의 init() 메소드를 호출하여 초기화를 진행 하겠다는 뜻이다.
이 과정을 통하여 struts-config.xml의 모든 정보가 객체로 변환되어 메모리에 저장 되었다가 이후에 재 사용된다.
마지막으로 확장자는 *.do로 사용하겠다는 정보를 명시하고있다.

[ActionForm]

public class UserForm extends ActionForm {
    // --------------------------------------------------------- Instance Variables
    private String password;
    private String userId;
    private String email;
    private String name;

    public ActionErrors validate(
         ActionMapping mapping,
  HttpServletRequest request) {
        return null;
    }

    public void reset(ActionMapping mapping, HttpServletRequest request) {
  password = null;
  userId = null;
  email = null;
  name = null;
    }
    ……. 중략 ……..

특이할만한 메소드는 validate()와 reset() 메소드이다.
reset() 메소드는 한번의 요청을 처리한 다음 초기화할 속성에 대하여 초기화 작업을 담당하는 메소드이다.
validate() 메소드는 사용자로부터 전달되는 값들의 유효성을 서버측에서 체크하기 위한 메소드이다.
보통의 웹 애플리케이션은 자바 스크립트(Java Script)를 이용하여 클라이언트 측에서 유효성 체크를 많이 한다.
하지만 서버측에서 유효성 체크를 같이 해주는 것이 애플리케이션을 더 좋게 만들 수 있는 기초가 된다.
스트럿츠에서는 클라이언트가 입력한 값이 ActionForm을 상속하는 클래스에 저장된다.
따라서 클라이언트가 입력한 값을 구하기 위하여 request.getParameter("paramName")을 사용할 필요 없이 Form클래스를 이용하여 가능하다.
스트럿츠가 추가된 Form클래스를 인식하도록 하기 위하여 struts-config.xml에 다음과 같이 추가해주어야 한다.

<form-beans>
 <form-bean name="userForm" type=“com.paran.struts.form.UserForm" />       
</form-beans>

[struts-config.xml]

애플리케이션 실행을 위한 메타 데이터 관리
Logical-to-physical 맵핑. (Actions, ActionForms, ActionForwards)
폼 빈 지정, 추상적 페이지 맵핑, 페이지 흐픔, 액션 클래스 지정, 예외처리, 메시지 리소스, 플러그인 지정.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
  <!-- ========== Form Bean Definitions =================================== -->
  <form-beans>
    <form-bean name="boardForm“ type="net.javajigi.form.BoardForm“ />
    <form-bean name="listForm“ type=“com.paran.form.ListForm“ />
  </form-beans>

  <!-- ========== Global Forward =================================== -->
    <global-forwards>
        <forward name=“logoff” path=“/logoff.do” />
        <forward name=“logon” path=“/logon.jsp” />
    </global-forwards>

<!-- ========== Action Mapping Definitions =================================== -->
   <action-mappings>
    <action
      path="/board_writeForm"
      type=“com.paran.action.BoardWriteFormAction"
      name="boardForm"
      scope="request"
      unknown="false"
      validate="true"
    >
      <forward
        name="write"
        path="/board_write.jsp"
        redirect="false"
      />
    </action>

    <exception key=“expired.password”
               type=“rog.apache.struts.webapp.example.ExpiredPasswordException”
               path=“/changePassword.jsp” />
    </action-mappings>

    <controller
     contentType="text/html;charset=euc-kr"
     debug="3"
     locale="true"
     nocache="true"
     processorClass=“com.paran.processor.MyAppRequestProcessor"/>
    
    <message-resources parameter="net.javajigi.resources.ApplicationResources"/>
</struts-config>

[다중 모듈 지원]

규모(메뉴)에 따라 애플리케이션을 여러 개로 분할하여 관리하면 효율적이다.

[선언적 에러 처리]

전역이나 Action별로 특정 Exception을 처리하는 Exception Handler를 선언적으로 지정할 수 있다.

[유효성(Validation) 확인]

1) 버전 1.1부터 Struts 패키지에 포함됨.
2) XML 파일을 통한 유효성 검증.(validation.xml, validation-rule.xml)
3) 서버 및 클라이언트 사이드 Validation 지원 - java script 자동 생성(클라이언트 사이드)
4) Regular expression 사용
5) 확장 가능한 아키텍처
6) 기본적으로 제공하는 Validation : 숫자 여부(float, int), 자릿수 체크, 신용카드 번호, 이메일 주소

[플러그 인 기능]

StartUp Class를 선언적으로 추가
Ex) Validator, Tiles 플러그인 등 등…

[Struts Commons Libraries]

■ Jakarta Commons 라이브러리 사용

1) commons-beanutils
   Bean 프로퍼티 핸들링
2) commons-collections
   표준 JAVA2 커렉션 클래스의 확장 라이브러리
3) commons-dbcp
   Optional JDBC Connection Pool
4) commons-digester
   XML 파싱
5) commons-fileupload
   Http를 통한 파일 업로드
6) commons-logging
   애플리케이션 logging wrapper
7) commons-pool
   오브젝트 풀링
8) commons-resources
   메시지 리소스 지원
9) commons-validator
   필드 validation

[Struts의 “전과 후”]

■ Struts 장점

   1) JSP 태그 메커니즘 사용
      이 태그 기능은 재사용 가능한 코드를 조장하고 JSP 파일에서 자바 코드를 제거한다.
      이 기능은 JSP 기반 개발툴로 잘 통합된다.
   2) 태그 라이브러리(Tag library)
      재구현이냐, 태그 라이브러리냐? 필요로 하는 것이 라이브러리에 없다면 여러분이 기여하면 된다.
      또한 Struts는 JSP 태그 기술을 배울 수 있는 좋은 토대이다.
   3) 오픈 소스
      코드를 볼 수 있다는 오픈 소스만의 장점이 있다. 보는 눈들이 많은 만큼 코드 리뷰가 확실하다.
   4) Sample MVC 구현
      자신만의 MVC 구현을 만들고 싶다면 Struts가 도움이 된다.
   5) 문제 관리
      분할과 정복(Divide & conquer)은 문제를 해결하고 문제를 관리할 수 있는 좋은 방법이다.

■ Struts 단점

   1) 정확한 추상화 레벨
     Struts는 정확한 레벨의 추상화를 제공하는가? 페이지 디자이너에게 맞는 추상화 레벨은 무엇인가? 좋은 질문이다. 페이지 디자이너가 페이지 개발 시 자바 코드에 액세스 하도록 할 수 있는가? UI 개발 시 자바 코드 액세스를 제한하는 이유가 있다. 가장 중요한 이유는 페이지 디자이너에게 자바를 조금만 제공해도 많은 자바를 사용하기 때문이다. Microsoft ASP 개발이 이를 증명한다. ASP 개발 시 COM 객체를 만들어서 ASP 객체들을 구현한 다음 ASP 스크립트를 작성하여 이를 함께 묶는다. 대신, ASP 개발자들은 ASP 스크립트 때문에 미칠 지경에 이른다. "내가 VBScript로 직접 프로그래밍 할 수 있는 것을 왜 COM 개발자가 이를 구현할 때 까지 기다려야 하나?" 라고 푸념하는 소리가 들린다. Struts는 태그 라이브러리를 통해 JSP 파일에 필요한 자바 코드의 양을 제한한다. Logic Tag는 아웃풋의 조건적 생성을 관리하지만 자바 코드 때문에 UI 개발자가 괴로워하는 것에는 속수무책이다. 어떤 유형의 프레임웍을 사용하든지 전개 및 관리 환경은 이해해야 한다. 물론 어려운 일이다.
   2) 범위 제한
     Struts는 웹 기반 MVC 솔루션으로서 HTML, JSP 파일, 서블릿을 사용하여 구현된다.

[Struts의 미래]

새로운 소프트웨어 개발 시대에 모든 것은 빠르게 변화한다. 5년도 채 못 되어서 Struts는 웹 애플리케이션 개발에
표준으로 자리매김 하고 있다. 기존 Servlet, JSP의 문제점이나 편리성 등을 모두 만족시켰기에 가능하였다.
현재 Struts2.0 버전이 베타 릴리즈 될 만큼 계속적인 진화게 진행 중이다. 향후 Servlet, JSP의 대안이 아닌 J2EE
환경이 보다 확장된 기능까지 지원될지 지켜볼 만 하다.


- 이 종 화 (ingenuity.egloos.com) -


덧글

  • this 2007/01/11 11:15 # 삭제 답글

    구글에서 struts를 요약한 내용을 검색하다 링크타고 이곳까지 왔습니다.
    대부분 비슷하고 제가 원하는 내용을 찾기 힘들었는데 발견하게 되어 기쁩니다. ^^
    좋은 글 계속 부탁드립니다.
댓글 입력 영역