struts로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

struts로 검색한 결과
등록일:2008-03-16 11:45:44
작성자:
제목:Struts 2 Tutorial - 09.Struts 2 xml 환경설정파일


본 튜토리얼은 제가 struts 2를 공부할 목적으로 아래의 원문에 링크된 문서를 번역하여 정리한 것입니다.
원문: http://www.roseindia.net/struts/struts2/struts-xml.shtml



이번 섹션에서는 struts.xml 파일을 소개합니다. 이 섹션은 대규모 프로젝트에서 struts.xml 파일을 어떻게 사용하는 것이 좋은가를 설명합니다.

struts.xml 파일
스트럿츠 2 프레임웍은 자신의 리소스를 초기화하기 위해서 설정파일(struts.xml)을 사용합니다.
초기화되는 리소스는 아래의 것들을 포함합니다.
  • 요청이 일어나기전 처리와 요청이 일어난 후 처리하는 인터셉터
  • 비즈니스 로직과 데이터에 접근하는 코드를 호출하는 액션 클래스
  • 자바서버페이지, 벨로시티, 프리메이커 탬플릿을 사용하여 뷰를 표시하기 위해 준비된 결과
런타임시에, 어플리케이션을 위한 하나의 설정파일이 있습니다. 런타임이전에, 기본적으로 struts.xml 문서를 포함하여 하나 혹은 그 이상의 XML 문서에 의해서 설정이 정의됩니다. 패키지, 네임스페이스, 인클루드, 액션, 결과, 인터셉터, 예외과 같이 설정될 수 있는 몇개의 요소가 있다.

struts.xml 파일은 프레임워크를 위한 핵심적인 설정 파일이고 이러한 설정은 웹 어플리케이션의 클래스 패스 안에 있어야만한다.

스트럿츠 2 설정 파일의 특징

  • struts.xml 파일을 작은 파일로 분리하는 것을 허용하며 설정 파일은 필요에 따라 삽입되어 사용될 수 있습니다. 아래에 이것에 대한 샘플이 있습니다.
    <struts>
    .....
    ......
    <include file="file1.xml"/>
    <include file="file2.xml"/>
    .....
    .....
    </struts>
  • struts-plugin.xml파일을 JAR파일 안에 둘 수도 있으며 이것은 웹 어플리케이션에 자동적으로 적용됩니다. 이것은 프로그래머로 하여금 자체적으로 설정파일을 포함한 컴포넌트를 개발할 수 있게 해줍니다.
  • 만약 프레임워크를 프리메이커나 벨로시티와 함께 사용하고 싶다면, 탬플릿들은 클래스패스로부터 로딩될 수 있습니다. 이것은 개발자가 하나의 JAR파일안에 전체 모듈을 패키징할 수 있게 할 수 있게 합니다.


struts.xml 파일의 구조
마지막 섹션에서 Hello World 어플리케이션을 개발하고 테스트했었습니다. 이 마지막 예제에서 사용된 struts.xml 파일이 아래와 같습니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="roseindia" namespace="/roseindia" extends="struts-default">

<action name="HelloWorld" class="net.roseindia.struts2HelloWorld">
<result>/pages/HelloWorld.jsp</result>
</action>

<!-- Add actions here -->
</package>


<!-- Add packages here -->

</struts>

struts.xml 파일은 스트럿츠 2 문서 정의 (DTD)를 만족시켜야 합니다.

스트럿츠 2 문서 정의 (DTD) 는 struts.xml 파일이 가져야만 하는 구조와 요소에 대한 정보를 제공합니다.

아래는 스트럿츠 2.0의 DTD 입니다.

<!--
struts configuration DTD.
Use the following DOCTYPE

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
-->

<!ELEMENT struts (package|include|bean|constant)*>

<!ELEMENT package (result-types?, interceptors?,
default-interceptor-ref?, default-action-ref?, global-results?,
global-exception-mappings?, action*)>

<!ATTLIST package
name CDATA #REQUIRED
extends CDATA #IMPLIED
namespace CDATA #IMPLIED
abstract CDATA #IMPLIED
externalReferenceResolver NMTOKEN #IMPLIED
>

<!ELEMENT result-types (result-type+)>

<!ELEMENT result-type (param*)>
<!ATTLIST result-type
name CDATA #REQUIRED
class CDATA #REQUIRED
default (true|false) "false"
>

<!ELEMENT interceptors (interceptor|interceptor-stack)+>

<!ELEMENT interceptor (param*)>
<!ATTLIST interceptor
name CDATA #REQUIRED
class CDATA #REQUIRED
>

<!ELEMENT interceptor-stack (interceptor-ref+)>
<!ATTLIST interceptor-stack
name CDATA #REQUIRED
>

<!ELEMENT interceptor-ref (param*)>
<!ATTLIST interceptor-ref
name CDATA #REQUIRED
>

<!ELEMENT default-interceptor-ref (param*)>
<!ATTLIST default-interceptor-ref
name CDATA #REQUIRED
>

<!ELEMENT default-action-ref (param*)>
<!ATTLIST default-action-ref
name CDATA #REQUIRED
>

<!ELEMENT global-results (result+)>

<!ELEMENT global-exception-mappings (exception-mapping+)>

<!ELEMENT action (param|result|interceptor-ref|exception-mapping)*>
<!ATTLIST action
name CDATA #REQUIRED
class CDATA #IMPLIED
method CDATA #IMPLIED
converter CDATA #IMPLIED
>

<!ELEMENT param (#PCDATA)>
<!ATTLIST param
name CDATA #REQUIRED
>

<!ELEMENT result (#PCDATA|param)*>
<!ATTLIST result
name CDATA #IMPLIED
type CDATA #IMPLIED
>

<!ELEMENT exception-mapping (#PCDATA|param)*>
<!ATTLIST exception-mapping
name CDATA #IMPLIED
exception CDATA #REQUIRED
result CDATA #REQUIRED
>

<!ELEMENT include (#PCDATA)>
<!ATTLIST include
file CDATA #REQUIRED
>

<!ELEMENT bean (#PCDATA)>
<!ATTLIST bean
type CDATA #IMPLIED
name CDATA #IMPLIED
class CDATA #REQUIRED
scope CDATA #IMPLIED
static CDATA #IMPLIED
optional CDATA #IMPLIED
>

<!ELEMENT constant (#PCDATA)>
<!ATTLIST constant
name CDATA #REQUIRED
value CDATA #REQUIRED
>

만약 어플리케이션의 기능이 struts.xml 파일에 의존적이지 않을 경우 어플리케이션에서 "struts.xml"파일을 완전히 제거하는 것은 가능합니다. 여기에는 주석, "web.xml" 구동 파라미터들, URL 매핑정보들과 같은 다루어질수 있는 몇가지 설정이 있습니다.  여전히 struts.xml 파일에는 전역 결과, 예외처리, 사용자 인터셉텨 스택과 같은 항상 필요한 몇가지 설정들이 있습니다.

struts.xml 탐험하기
<struts> 태그는 struts.xml 파일의 루트 태그입니다. 이것은 pacakge, include, bean, constant 같은 태그들을 포함할 수 있습니다.

1. Package 태그
package 는 액션, 결과, 결과형태, 인터셉터 스택 등을 논리적인 설정 단위로 그룹핑하는 방법입니다. 개념적으로 package는 "sub" package 에 의해 오버라이드 될 수 있으며 확장될 수 있고 개인적인 부분을 가지고 있는 객체와 유사합니다.

<package /> 태그는 인터셉터 스택이나 URL 네임스페이스 같은 공통적인 속성을 공유하는 설정과 함께 그룹핑하는데 사용되곤 합니다. 함수를 조직적으로 분리하는데 유용합니다. 그리고 이것은 별도의 설정 파일로 분리되게 됩니다.

package 요소는 하나의 필수 속성(name)이 있습니다. 이것은 나중에 package를 참조할 때 key로서 사용됩니다. 확장된 요소는 옵션이며 하나의 패키지가 두개 혹은 그이상의 이전 패키지(모든 인터셉터, 인터셉터 스택, 액션 설정)의 환경설정을 상송하는 것을 허락합니다.

환경설정 파일은 문서를 순차적으로 처리한다는 것을 주목해야 합니다. 그래서 "확장(extend)" 에 의해서 참고된 package는 확장(extended)된 package 보다 상위에 정의되어 있어야만 합니다.

부가적이고 추상적인 요소는 액션 환경설정을 생략할 수 있는 기본 package를 생성합니다.

요소
필수
설명
name 필수 다른 package가 참조하기 위한 key
extends 선택
package는 확장하기로 한 package의 행위를 상속한다
namespace 선택 URL과 package의 매핑을 제공한다
abstract 선택 패키지를 추상적으로 선언한다 (패키지에 액션 설정이 필요없다.)
1.name - 패키지를 위한 유일한 이름이 주어진다.

2,extends - 이 패키지는 확장하려고 하는 package 의 이름; 확장된 package로 부터 모든 설정 정보 (액션 설정을 포함하여)가 새로운 namespace의 새로운 package에서 이용가능하다.
3.namespace - namespace는 URL과 package의 매핑을 제공한다. 즉, namespace 속성으로 "pack1"과 "pack2"로 정의된 두개의 다른 package에서 URL은 "/webapp/pack1/my.action" 과 "/webapp/pack2/my.action" 처럼 될 수 있다.
4.abstract - 만약 이 속성값이 "true"이면 package가 진짜 설정 그룹이고 설정된 액션은 package 이름을 통하여 엑세스 불가능할 것이다.  이미 설정된 특성들을 사용하기 위해서는 정확한 부모 패키지를 확장해야 한다.

2.include 태그
<include /> 태그는 다른 설정 파일의 포함이 필요한 스트럿츠 2 어플리케이션을 모듈화하기 위해 사용된다.
이 것은 포함할 xml 파일의 이름을 제공하는 "file" 이라는 단지 하나의 속성만을 가진다. 이 파일은 "struts.xml" 설정 파일과 정확하게 같은 구조를 가진다. 예를 들면, 재정 어플리케이션의 설정 파일을 분리하기 위해서는 구매, 관리자, 보고서 설정 등을 함께 그룹지을 것을 아래와 같이 선택한다.
<struts>

<include file="invoices-config.xml" />
<include file="admin-config.xml" />
<include file="reports-config.xml" />

</struts>
파일을 포함하는 경우, 순서가 중요하다. 포함된 파일의 정보는 파일안의 include 태그가 위치한 지점으로부터 이용가능하다.

무 조건 포함되어야 하는 파일이 있다. "strutsdefault.xml"과 "struts-plugin.xml" 파일이 있다. 두 개의 파일은 모두 결과 타임, 인터셉터, 인터셉터 스택, 패키지를 위한 기본 설정과 웹 어플리케이션 실행 환경 설정 정보("struts.properties"안에 설정된)를 포함한다. "struts-default.xml"은 스트럿츠2의 핵심설정을 제공하고 "struts-plugin.xml"은 특별한 플러그인에 대한 환경설정을 제공한다는 차이가 있다. 각각의 플러그인 JAR 파일은 실행하는 동안에 로딩되는 "struts-plugin.xml"파일을 보함해야 한다.

3.bean 태그
대부분의 어플리케이션은 bean 설정을 확장할 필요가 없습니다. bean 요소는 생성되거나 교정하기 위한 자바클래스를 명기하는 클래스 속성을 요구합니다.

bean은

1. 프레임워크의 컨테이너에 의해서 생성되어 내부 프레임워크 객체로 투입되거나
2.스태틱 메소드에 포함된 값

이 될 수 있다.

객 체 투입의 첫번째 사용은 일반적으로 타입 어트리뷰트를 동반하며 컨테이너에게 이 객체 인터페이스의 구현체를 알려준다. 값 투입의 두번째 사용은 컨테이너에 의해서 생성되지 않은 객체가 프레임워크 상수를 받아들이도록 하는 것이 좋다. 값 투입을 사용한 객체는 스태틱 어트리뷰트로 정의되어야만 한다.
속성
필수
설명
class 필수 bean 클래스의 이름
type 선택 이 클래스가 구현한 주요 자바 인터페이스
name 선택 이 bean의 유일한 이름; 같은 타입의 다른 bean사이에서 유일해야 한다.
scope 선택 bean의 범위; 기본, 싱글톤, 리퀘스트, 세션, 쓰레드 중에 선택
static 선택 스태틱 메소드에 투입하거나 그렇지 않거나; 타입이 특성화 되면 사실이 아니다.
optional 선택 선택적이거나 아니거나

Bean 샘픔(struts.xml)
<struts>
  <bean type="roseindia.net.ObjectFactory" name="factory" class="roseindia.net.MyObjectFactory" />
...
</struts>

4.constant 태그
constants를 위한 두개의 주요 규칙이 있다.
1.최대 파일 업로드 크기나 스트럿츠 프레임워크의 devMode여부 같은 오버라이드 세팅을 사용한다.
2.주어진 타입의 다양한 구현체중에서 어떤 bean이 선택되었는지 자세히 기술한다.
constant는 다양한 파일안에서 선언될 수 있다. 기본적으로 constant는 아래와 같은 순서대로 검색된다.
이전의 constant는 따라서 나오는 파일에 의해 오버라이드 될 수 있다.
  • struts-default.xml
  • struts-plugin.xml
  • struts.xml
  • struts.properties
  • web.xml

struts.properties 파일은 WebWork에 후방 호환성을 제공한다. struts.properties 파일안에 각각의 엔트리는 상수로서 다루어진다. web.xml 파일에서 FilterDispatcher 초기화 파라미터는 상수로서 로딩된다.

다양한 XML 다양한, 상수 요소는 name과 value의 두개의 요소가 필요하다.

속성
필수 설명
name
필수 상수이름
value
필수 상수값

constant 의 예 (struts.xml)
<struts>

<constant name="struts.devMode" value="true" />

...

</struts>

constant 의 예 (struts.properties)
struts.devMode = true

출처 : http://jedison.tistory.com/68