일반 struts-config 설명 및 작성방법

황제낙엽 2006.02.27 11:47 조회 수 : 73 추천:66

sitelink1 http://blog.naver.com/rowoon520/120013000701 
sitelink2  
extra_vars5  
extra_vars6  
출처 :: 링크1

struts-config.xml에 대한 element정의

Struts 1.2부터 display-name과 description 두 개의 엘리먼트가 추가되었다.

이 두 엘리먼트는 모듈설정 파일에 대한 설명문을 정의하기 위한 엘리먼트이다.

모듈설정 파일을 작성하는 GUI툴과 친화성을 고려해 추가된다.

1. Data Source에 대한 정의

Struts는 표준으로 데이터소스에 엑서스하기 위해 리소스(DataSources)를 제공하는 기능이다.

설정은 아래와 같이 기술한다. 리스트에는 데이터소스에의 접속 파라미터를 정의한다.

<data-sources>
      <!-- Oracel DBCP Setting  -->
      <data-source type= "org.apache.commons.dbcp.BasicDataSource" >
           <set-property property= "driverClassName"
                value= "oracle.jdbc.driver.OracleDriver" />
          <set-property property= "username" value="username" />
          <set-property property= "password" value="password" />
          <set-property property= "url"
               value= "jdbc:oracle:thin:@localhost:1521:SID" />
          <set-property property= "maxActive" value="100" />
          <set-property property= "maxIdle" value="30000" />
          <set-property property= "maxWait" value= "100" />
          <set-property property= "defaultAutoCommit" value= "true" />
     </data-source>
</data-sources>

<data-sources>엘리먼트 내부에는, <data-source>엘리먼트를 설정하여 정의 가능하다.

이 <data-sources>엘리먼트가 하나의 데이터베이스에 대응하여, 복수의 데이터소스가 정의 가능하다.

<data-sources>엘리먼트에는, <set-property>엘리먼트로 다양한 파라미터가 설정가능하다.

여기에 정의한 데이터소스를 사용한 데이터패스의 액서스방법은 아래와 같다.
 
public ActionForward execute( ActionMapping mapping, ActionForm form,
                     HttpServletRequest request, HttpServletResponse response )
                               throws Exception {

    // 이름이 없는 데이터소스( <data-source> )의 정보를 얻는 경우
    DataSource dataSource = getDataSource( request );

    // 이름이 붙여진 데이터소스( <data-source key="oracle"> )의 정보를 얻는 경우
    // DataSource dataSource = getDataSource( request, "oracle" );

}

2. ActionFormBean에 대한 정의

ActionFormBean의 정의는 아래의 예제소스와 같이 <form-beans>엘리먼트안의 구성요소의 <form-bean>엘리먼트에 지정한다. ActionFormBean에는 정적ActionFormBean과 동적ActionFormBean이 있어, 각자의 정의 방법이 다르다. 정적ActionFormBean의 경우, 아래 예제소스의 연두색 부분과 같이 된다. Bean명을 name속성에, 그 구현 클래스를 type속성에 설정한다.
동적ActionFormBean의 정의의 경우, 아래 예제소스의 분홍색 부분과 같이 조금 복잡하게 된다.
<form-bean>엘리먼트의 name속성엔, 정적ActionFormBean과 동일하게 Bean명을 설정한다. type속성엔, org.apache.struts.action.DynaActionForm클래스(혹은 DynaActionForm클래스를 상속받은 클래스)을 지정한다.
Bean속성은 <form-property>엘리먼트에 설정하여 <form-property>은 <form-bean>엘리먼트안에 위치시켜 지정한다.

<form-beans>

    <form-bean name= "LogonAcrionFormBean" type= "sample.forms.LogonActionForm" />

    <form-bean name= "langBean" type= "org.apache.struts.action.DynaActionForm" >
         <form-property name= "username" type= "java.lang.String" />
         <form-property name= "password" type= "java.lang.String" />
    </form-bean>

</form-beans>


<form-bean>엘리먼트에 지정가능한 정의 ([]안은 기본값)
  - name : ActionFormBean의 이름을 정의한다.
  - type : ActionFormBean을 구현한 클래스를 완전경로로 지정한다.
  - className[org.apache.struts.config.FormBeanConfig] : ActionFormBean 정의에 대한 정보를 보관하는 클래스를 지정한다.
  - dynamic[false] : type에 지정한 클래스가 DynaActionForm 혹은, 그 서브클래스인가 아닌가의 여부를 boolean값으로 지정한다.
(생략 가능하다.) 현재는 type에 지정된 클래스를 자동으로 판단하므로, 보통은 지정할 필요가 없다. Struts1.1부터는 추천되지 않는다.

<form-property>엘리먼트에 지정가능한 정의
  - className[org.apache.struts.config.FormPropertyConfig] : 해당 프로퍼티속성을 보관하는 클래스를 지정한다.
  - initial[null or 0] : 해당 프로퍼티의 초기화
  - name : 해당 프로퍼티의 이름
  - type : 해당 프로퍼티의 타입(型)의 완전경로 클래스명 혹은 변수타입 (배열의 경우는 []을 붙여 표현한다.(예 String[]) )
  - size : type속성에 배열을 지정했을 경우, 배열에 사이즈를 설정하고 싶을경우 지정한다.


3. Exception에 대한 정의


처리대상의 예외타입마다 <exception>엘리먼트를 완전경로 클래스명으로 선언한다.
<exception>엘리먼트의 type속성에는 처리대상의 예외타입을 지정한다.
key속성에는 예외처리시에 에러메세지를 등록하는 에러메세지의 메세지리소스의 key를 지정한다.
path에는 예외발생시 이동할 패스를 지정한다. 밑의 예제는 "java.lang.Exception"타입의 객체가 Action에서 throw된 경우,
에러메세지에 "error.str.internal"을 key로 하는 메세지를 등록해 "/pages/systemerror.jsp"를 실행한다.
예외처리의 정의에 사용하는 <exception>엘리먼트는 2종류의 엘리먼트가 지정 가능하다. <action>엘리먼트에 지정하는 로컬예외처리와
<global-exceptions>엘리먼트에 정의하는 글로벌예외처리이다.

<global-exceptions>

    <exception>
         key= "error.str.internal"
         type= "java.lang.Exception"
         path= "/pages/systemerror.jsp" />

</global-exceptions>

<exception> 엘리먼트에 저정하능한 정의
  - type : 처리대상 예외타입의 완전경로 클래스명을 지정한다.
  - path : 해당 예외를 처리하는 리소스의 모듈상대 URI을 지정한다.
  - bundle : key속성에 지정한 메세지가 특정 메세지리소스 번들에 있는 경우, 그 번들명을 지정한다.
생략시는 [org.apache.struts.Globals.MESSAGES_KEY]로 되어, 기본 메세지리소스를 참조한다.
  - className : className에는 exception정의의 정보를 보관하는 클래스를 지정한다. 지정하지 않는 경우에는
기본클래스인 ["org.apache.struts.config.ExceptionConfig"]가 사용된다. 특수한 속성 등을 추가하고 싶을 경우엔
이 클래스의 서브클래스를 작성하면 된다.
  - handler : 예외를 처리하기 위한 예외 핸드클래스를 지정한다. 지정하지 않는 경우엔 ["org.apache.struts.action.ExceptionHandler"]클래스가 지정된다.
  - scope : 에러메세지를 보관한 에러컨테이너를 보관하기 위해 컨테이너를 지정한다.
  - key : 에러메세지의 에러메세지리소스의 key를 지정한다.


4. GlobalActionForward에 대한 정의


JSP 등에서 참조가능한 Forward명을 지정한다. 지정은 <global-forwards>엘리먼트에서 한다.
각자의 GlobalActionForward는 <forward>엘리먼트에 지정하여, 여기에서 지정된 GlobalActionForward의 이론명은 JSP안의 Struts커스텀태그를 경유하고, 액션클래스부터는 액션클래스맵핑을 경유하여 참조가능하다.
<forward>엘리먼트의 기술방법은 LocalActionFroward의 정의와 바뀌지않는다.
Struts커스텀태그는 <html:link>태그의 forward속성이나 <logic:redirect>태그의 forward속성 혹은 <logic:forward>태그의 name속성 등에
GlobalActionForward의 이론명이 사용 가능하다. Action클래스에는 ActionMapping클래스 findForward함수의 파라미터에 GlobalActionForward의 이론명을 지정하는 것으로 ActionForward객체를 얻을수 있다.

<global-forwards>

    <forward name= "logonpage" path= "/pages/logon.jsp" />
    <forward name= "registrationpage" path= "/pages/registration.jsp" />

</global-forwards>



5. ActionMapping에 대한 정의

ActionMapping은 모듈설정파일에서 가장 중요한 설정이다. Struts 본래의 목적이라고 얘기해도 과언이 아니다.
ActionMapping은 Request 패스에 대해, 각자 대응하는 Action을 정의한다. Action은 Java클래스로 구현한다.
정의된 Action의 클래스가 Request패스마다에 기동되어, 각자 처리를 실행한다.
ActionMapping에는 그 외에도 ActionFormBean의 정의나 Action종료시의 동작을 정의할 수 있다.
ActionMapping는 <action-mappings>엘리먼트안에 지정한다.
각자의 ActionMapping은 <action-mappings>엘리먼트의 위치하는 타입으로 <action>엘리먼트를 이용해 정의한다.

* 모듈대상패스
    모듈대상패스라는 건, 해당 모듈 시점의 리소스의 패스이다. 예를들어, admin이라는 이름의 모듈안에
    "/logon"이라는 Action과 "logon.jsp"이 있을 경우, admin모듈의 모듈설정파일안의 모듈대상패스는 "/logon.do"이 된다.
    JSP도 동일하게 "/logon.jsp"이 되어 모듈명은 패스중에 기술하지 않는다. 이때 브라우져로부터 액세스하기 위한 실제의 패스는
    모듈명이 추가된 Web Application으로 부터의 대상패스(Context대상 패스) "/admin/logon.do" 혹은 "/admin/logon.jsp"가 된다.
    이것이 모듈대상패스와 Context대상패스와의 다른점이다.

<action>엘리먼트로 지정가능한 속성

  - attribute : name속성과 동일, name속성이 정의되어 있는 경우 무시된다.
  - className["org.apache.struts.action.ActionMapping"] : ActionMapping에 대한 정보를 보관하는 클래스.
기본설정 클래스는 <action-mappings>엘리먼트의 type속성에 지정된 클래스, 또는 정의하지 않은 경우 org.apache.struts.action.ActionMapping클래스가 된다.
  - forward : type속성에 따라 지정된 Action클래스를 대신해 해당 Request를 처리하는 서블렛 혹은 별도의 리소스에의 모듈대상패스를 지정한다.
해당 ActionMapping과 Match된 Request는 지정된 패스에 전송된다. 지정한 패스는 <controller>엘리먼트의 forwardPattern속성의 영향을 받지 않는다.
forward속성과 include속성, type속성은 별도로 지정한다.
해당 지정은 type속성에 ForwardAction을 지정한 상태에서 parameter속성과 동일한 값을 지정하는 것과 같은 효과가 있다.
  - include : type속성에 따라 지정된 Action클래스 대신에 해당 Request를 처리하는 서블렛 또는 다른 리소스에의 Context대상패스를 지정한다.
해당 ActionMapping과 Match되는 Request는 지정된 패스의 리소스에서 처리되지만, Response는 해당 Action의 결과로써 처리된다.
지정한 패스는 <controller>엘리먼트의 forwardPattern속성의 영향을 받지 않는다. forward속성과 include속성, type속성은 별도로 지정한다.
해당 지정은 type속성에 IncludeAction을 지정한 상태에서 parameter속성과 동일한 값을 지정하는 것과 같은 효과가 있다.
  - input : ActionFormBean의 validate기능에서 에러가 발생했을 경우에, 다음으로 Request를 처리하는 Action, 또는 별도의 리소스에의 모듈대상패스를
지정한다. name속성이 지정되어, validate기능에서 에러가 반환되는 경우에는 필수항목이다.
  - name : ActionFormBean명을 지정한다. 해당 Action에 대해 HTML Form이 존재하는 경우 (동시에 Form커스텀태그에 기술되어 있는 경우)에는 필수항목이다.
form커스텀태그는 JSP 실행시에 이 속성에서 정의된 ActionFormBean을 Context에서부터 참조할려고 하므로, name속성이 정의되어 있지 않으면 실행시에 에러가 발생한다.
  - path : 해당 Action을 호출하기 위해 HTTP Request의 모듈대상패스를 정의한다.
브라우져로부터 Request(요청)된 HTTP Reqeust의 패스에 모듈명을 제거할 수 있다.
패스명의 첫문자는 슬래쉬"/"가 들어간다. extension매핑를 사용하고 있는 경우 extension명은 불필요하다.
패스명에 마침표"."는 들어갈 수 없다.
  - parameter : 각자의 Action에 확장정보로써 Action에서 사용되는 속성이다. type에서 지정한 Action클래스마다 구현법이 다르다.
  - prefix : prefix는 ActionFormBean의 프로퍼티명에 Request Parameter명을 매칭하는데 사용한다.
name속성이 정의되어 있는 경우에는 무시된다.
  - roles : 해당 ActionMapping를 실행가능한 세큐리티롤(SecurityRole)명을 콤마"."로 구분한 리스트를 지정한다.
  - scope : ActionFormBean의 Context를 request, 또는 session에서 지정한다.
name속성이 지정되어 있지 않은 경우는 적용되지 않는다.
  - suffix : ActionFormBean의 프로퍼티명과 Reuqest Parameter명을 매칭시킬 때 사용한다.
name속성이 지정되어 있지 않는 경우 적용되지 않는다.
  - type : Action을 구현한 클래스의 완전경로 클래스명을 지정한다. Action클래스는 [org.apache.struts.action.Action]의 서브클래스로
있을 필요가 있다. 여기서 지정된 Action구현클래스가 해당 ActionMapping에 매치되는 Request가 있는 경우에 RequestProcceser에 따라
호출되어진다.forward속성, include속성에는 별도로 지정할 필요가 있다.
  - unknown[false] : 해당 모듈의 디폴트 ActionMapping의 경우에 true로 설정한다. 모듈안에 모든 ActionMapping에 매치하지 않는 Request패스의
경우에는 unknown속성이 true로 되어 있는 ActionMapping에서 처리한다. 이 속성을 true로 할수 있는 ActionMapping는 모듈내에 하나뿐이다.
  - validate[true] : ActionFormBean의 검사기능을 유효로 하는 경우 true로 설정한다.


* Lee Ki Eun님에 의해서 게시물 이동되었습니다 (2007-01-16 13:22)
번호 제목 글쓴이 날짜 조회 수
31 샘플예제 file 황제낙엽 2009.03.02 196
30 A Walking Tour of the Struts 2 MailReader Application (2) 황제낙엽 2008.12.10 63
29 A Walking Tour of the Struts 2 MailReader Application (1) 황제낙엽 2008.12.10 205
28 스트러츠2 샘플 어플리케이션 (MailReader Demonstration Application) file 황제낙엽 2008.11.20 574
27 스트러츠2 실습 예제 모음 (Struts Showcase) 황제낙엽 2008.11.20 56362
26 Struts와 Struts2의 로그인 매커니즘 비교 황제낙엽 2008.10.23 82
25 Struts2 시작하기 황제낙엽 2008.09.22 49007
24 Struts2(스트럿츠2) Feature(특징) 황제낙엽 2008.07.12 92
23 책 Starting Struts 2 - Free Online Version (InfoQ.com) file 황제낙엽 2008.07.11 490
22 스트러츠2 활용 Upload 예제 file 황제낙엽 2007.08.14 115
21 Struts 프레임워크를 이용한 효율적인 개발 전략 황제낙엽 2007.01.30 75
20 MyEclipse를 사용한 Struts 빠른 시작 황제낙엽 2007.01.26 335
19 EJB+JSP를 활용한 J2EE기반의 샘플 프로젝트 (JPetStore-5.0) 황제낙엽 2007.01.18 134
18 EJB+JSP를 활용한 J2EE기반의 샘플 프로젝트 (JPetStore-4.0.5) file 황제낙엽 2005.10.28 58
17 Struts GUI XML 작성 Tool 들 황제낙엽 2006.02.24 215
16 스트러츠로 작성된 웹서점 샘플화일 (Struts+Hsql) 황제낙엽 2005.11.24 76
15 Validation과 Dispatcher액션 황제낙엽 2006.05.22 290
14 폼빈의 Reset 황제낙엽 2006.05.22 116
13 Struts-Config.xml 과 액션과 JSP의 관계 황제낙엽 2006.05.22 65
» struts-config 설명 및 작성방법 황제낙엽 2006.02.27 73