struts.xml 파일은 프레임워크를 위한 핵심적인 설정 파일이고 이러한 설정은 웹 어플리케이션의 클래스 패스 안에 있어야만한다.
스트럿츠 2 설정 파일의 특징
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.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 네임스페이스 같은 공통적인 속성을 공유하는 설정과 함께 그룹핑하는데 사용되곤 합니다.
함수를 조직적으로 분리하는데 유용합니다. 그리고 이것은 별도의 설정 파일로 분리되게 됩니다.
환경설정 파일은 문서를 순차적으로 처리한다는 것을 주목해야 합니다. 그래서 "확장(extend)" 에 의해서 참고된 package는 확장(extended)된 package 보다 상위에 정의되어 있어야만 합니다.
부가적이고 추상적인 요소는 액션 환경설정을 생략할 수 있는 기본 package를 생성합니다.
요소 |
필수 |
설명 |
---|---|---|
name | 필수 | 다른 package가 참조하기 위한 key |
extends | 선택 |
package는 확장하기로 한 package의 행위를 상속한다 |
namespace | 선택 | URL과 package의 매핑을 제공한다 |
abstract | 선택 | 패키지를 추상적으로 선언한다 (패키지에 액션 설정이 필요없다.) |
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. 프레임워크의 컨테이너에 의해서 생성되어 내부 프레임워크 객체로 투입되거나속성 |
필수 |
설명 |
---|---|---|
class | 필수 | bean 클래스의 이름 |
type | 선택 | 이 클래스가 구현한 주요 자바 인터페이스 |
name | 선택 | 이 bean의 유일한 이름; 같은 타입의 다른 bean사이에서 유일해야 한다. |
scope | 선택 | bean의 범위; 기본, 싱글톤, 리퀘스트, 세션, 쓰레드 중에 선택 |
static | 선택 | 스태틱 메소드에 투입하거나 그렇지 않거나; 타입이 특성화 되면 사실이 아니다. |
optional | 선택 | 선택적이거나 아니거나 |
<bean type="roseindia.net.ObjectFactory" name="factory" class="roseindia.net.MyObjectFactory" />
...
</struts>constant는 다양한 파일안에서 선언될 수 있다. 기본적으로 constant는 아래와 같은 순서대로 검색된다.
4.constant 태그
constants를 위한 두개의 주요 규칙이 있다.
1.최대 파일 업로드 크기나 스트럿츠 프레임워크의 devMode여부 같은 오버라이드 세팅을 사용한다.
2.주어진 타입의 다양한 구현체중에서 어떤 bean이 선택되었는지 자세히 기술한다.
struts.properties 파일은 WebWork에 후방 호환성을 제공한다. struts.properties 파일안에 각각의 엔트리는 상수로서 다루어진다. web.xml 파일에서 FilterDispatcher 초기화 파라미터는 상수로서 로딩된다.
다양한 XML 다양한, 상수 요소는 name과 value의 두개의 요소가 필요하다.
속성 | 필수 | 설명 | |
---|---|---|---|
name | 필수 | 상수이름 | |
value | 필수 | 상수값 |
<struts>
<constant name="struts.devMode" value="true" />
...
</struts>
struts.devMode = true
출처 : http://jedison.tistory.com/68
SSISO Community