@ <include>요소는 struts.xml설정 파일에 필요한 요소들을 서로 다른 파일에 분리해서 작성한 후 이를 통합하도록 하는 기능이다.
@ struts.xml파일들은 struts2-core-2.0.x.jar 안에 있는 sturts-default.xml을 묵시적으로 include한 상태이며 명서적으로 인클루드해도 다른 차이는 없다.(자바의 모든 클래스가 묵시적으로 Object클래스를 상속받듯이)
@ <package>요소는 액션, 리절트, 인터셉터에 대한 설정을 패키지 단위로 묶는 작업을 한다.
@ namespace 가 아래와 같이설정되어 있으면 "context path"/tutorial06/HelloWorld.action 로 url 호출이 이뤄진다. 즉 tutorial06에서 HelloWorld.action을 찾게 됨
@ 디폴트 네임스페이스 : namespace="" 이거나 namespace를 생략하면 그 패키지는 디폴트 네임스페이스가 된다. 존재하지 않는 네임스페이스에서 액션을 호출하면 디폴트 패키지에 지정한 액션이 실행(이때 호출된 액션명은 서로 같아야한다!)
@ 루트 네임스페이스 : 컨텍스트 패스 바로 아래에 위치한 액션을 설정 namespace="/" , 루트 네임스페이스에서 액션을 찾지 못하면 역시 디폴트 네임스페이스에서 액션을 찾는다.
@ abstract 속성 : 액션이 없는 abstract 속성을 true로 지정하지 않으면 이 패키지를 상속할 때 에러가 발생한다. 액션이 없으면 반드시 속성을 true로 설정해야한다.
@ <action> :
- url과 액션 클래스를 매핑한다.
- 액션 수행 전 후로 실행할 인터셉터를 설정한다.
- 액션 수행 결과에 따른 리절트를 설정한다.
- 액션 수행 시 예외가 발생할 경우 예외에 따른 리절트를 설정한다.
@<action>의 method 속성은 옵션으로 액션이 인스턴스화 되자마자 호출할 메소드를 지정한다. 이러한 메소드를 액션 메소드라고 한다. 값을 지정하지 않으면 기본적으로 액션 메소드를 execute()로 인식한다.
@ 디폴트 액션 : 요청한 액션이 존재하지 않을 경우 500에러가 발생, 이런 에러를 처리하기 위한 액션이 디폴트 액션(default-action-ref )
@ 와일드 카드 매핑 : action수가 많아짐에 따라 이를 일일이 정의하기 보다는 와일드 카드를 사용하여 간단히 정의할 수 있다. 와일드 카드 사이에 구분자는 공백도 되고 문자가 와도 된다.(!,+등 왠만한 특수문자도 가능)
@ <constant> : 스트럿츠2는 사용자가 필요한 프레임 워크의 기능을 적합하게 변경하기 위해 다양한 프로퍼티를 갖는데 이는 상수 형태로 정의된다. name과 value의 두 필수 속성으로 구성됨
@ 위에서 언급한 <constant> 요소 말고 web.xml에도 설정할 수 있다.
@ 또는 sturts.properties 파일에서도 설정할 수 있다. 아래에 속성에서 action대신 다른 값으로 액션호출의 확장자를 바꿔줄 수 있다. struts2-core-2.0.x.jar 안에 있는 default.properties파일을 가져와서 sturts.properties로 이름을 바꿔 사용하면 됨
<include file="struts-03.xml"/>
<include file="testDir/struts-04.xml"/> -- 특정위치에 있는 경우 폴더 위치 명시
<include file="testDir/struts-04.xml"/> -- 특정위치에 있는 경우 폴더 위치 명시
@ struts.xml파일들은 struts2-core-2.0.x.jar 안에 있는 sturts-default.xml을 묵시적으로 include한 상태이며 명서적으로 인클루드해도 다른 차이는 없다.(자바의 모든 클래스가 묵시적으로 Object클래스를 상속받듯이)
@ <package>요소는 액션, 리절트, 인터셉터에 대한 설정을 패키지 단위로 묶는 작업을 한다.
속성 | 필수 | 설명 |
name | 필수 | 패키지를 구분하기 위한 이름을 설정하는 속성, 중복되어서는 안됨, 상속관계에서 사용됨 |
extends | 선택 | 다른 패키지의 환경 설정을 그대로 상속받아 사용하고자 할때 그 패키지의 이름을 속성값으로 |
namespace | 선택 | 액션의 URL경로를 지정할 때 컨텍스트 패스와 액션 이름 사이에 중간 경로를 지정하기 위한 속성 |
abstract | 선택 | 추상 패키지를 만들기 위한 속성으로 true이면 액션설정없이 다른 패키지에서 상속하는 용도로 쓰인다. |
@ namespace 가 아래와 같이설정되어 있으면 "context path"/tutorial06/HelloWorld.action 로 url 호출이 이뤄진다. 즉 tutorial06에서 HelloWorld.action을 찾게 됨
<package name="tutorial06" namespace="/tutorial06" extends="struts-default">
<action name="HelloWorld" class="tutorial.HelloWorld">
<result name="success">/helloWorld.jsp</result>
</action>
</package>
<action name="HelloWorld" class="tutorial.HelloWorld">
<result name="success">/helloWorld.jsp</result>
</action>
</package>
@ 디폴트 네임스페이스 : namespace="" 이거나 namespace를 생략하면 그 패키지는 디폴트 네임스페이스가 된다. 존재하지 않는 네임스페이스에서 액션을 호출하면 디폴트 패키지에 지정한 액션이 실행(이때 호출된 액션명은 서로 같아야한다!)
@ 루트 네임스페이스 : 컨텍스트 패스 바로 아래에 위치한 액션을 설정 namespace="/" , 루트 네임스페이스에서 액션을 찾지 못하면 역시 디폴트 네임스페이스에서 액션을 찾는다.
@ abstract 속성 : 액션이 없는 abstract 속성을 true로 지정하지 않으면 이 패키지를 상속할 때 에러가 발생한다. 액션이 없으면 반드시 속성을 true로 설정해야한다.
@ <action> :
- url과 액션 클래스를 매핑한다.
- 액션 수행 전 후로 실행할 인터셉터를 설정한다.
- 액션 수행 결과에 따른 리절트를 설정한다.
- 액션 수행 시 예외가 발생할 경우 예외에 따른 리절트를 설정한다.
@<action>의 method 속성은 옵션으로 액션이 인스턴스화 되자마자 호출할 메소드를 지정한다. 이러한 메소드를 액션 메소드라고 한다. 값을 지정하지 않으면 기본적으로 액션 메소드를 execute()로 인식한다.
@ 디폴트 액션 : 요청한 액션이 존재하지 않을 경우 500에러가 발생, 이런 에러를 처리하기 위한 액션이 디폴트 액션(default-action-ref )
<default-action-ref name="DefaultAction"/>
<action name="DefaultAction" class="tutorial.DefaultAction">
<result name="success">/helloWorld.jsp</result>
</action>
<action name="DefaultAction" class="tutorial.DefaultAction">
<result name="success">/helloWorld.jsp</result>
</action>
@ 와일드 카드 매핑 : action수가 많아짐에 따라 이를 일일이 정의하기 보다는 와일드 카드를 사용하여 간단히 정의할 수 있다. 와일드 카드 사이에 구분자는 공백도 되고 문자가 와도 된다.(!,+등 왠만한 특수문자도 가능)
<action name="HelloWorld*" class="tutorial.HelloWorld{1}">
<result name="success">/helloWorld.jsp</result>
</action>
<action name="*+*" class="tutorial.{1}" method="{2}">
<result name="success">/helloWorld.jsp</result>
</action>
<result name="success">/helloWorld.jsp</result>
</action>
<action name="*+*" class="tutorial.{1}" method="{2}">
<result name="success">/helloWorld.jsp</result>
</action>
@ <constant> : 스트럿츠2는 사용자가 필요한 프레임 워크의 기능을 적합하게 변경하기 위해 다양한 프로퍼티를 갖는데 이는 상수 형태로 정의된다. name과 value의 두 필수 속성으로 구성됨
<constant name="struts.devMode" value="true"/>
@ 위에서 언급한 <constant> 요소 말고 web.xml에도 설정할 수 있다.
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
@ 또는 sturts.properties 파일에서도 설정할 수 있다. 아래에 속성에서 action대신 다른 값으로 액션호출의 확장자를 바꿔줄 수 있다. struts2-core-2.0.x.jar 안에 있는 default.properties파일을 가져와서 sturts.properties로 이름을 바꿔 사용하면 됨
struts.action.extension=action