|
defaultStack에 timer 인터셉터를 추가하고, 이를 기본 인터셉터로 정하는 방법에 대해 소개하려합니다.
defaultStack은 스트럿츠2가 정해놓은 기본 인터셉터 스택입니다. 이는 strtus2-core-2.x.x.jar 파일 안에 struts-default.xml에 정의되어있습니다.
다음은 defaultStack 의 정의 내용입니다.
<struts> <package name="struts-default" abstract="true"> ... <interceptors> ... <!-- defaultStack --> <interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="i18n"/> <interceptor-ref name="chain"/> <interceptor-ref name="debugging"/> <interceptor-ref name="profiling"/> <interceptor-ref name="scopedModelDriven"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack> ... </interceptors>
<default-interceptor-ref name="defaultStack"/> </package> </struts>
우리가 작성하고 있는 웹 애플리케이션의 struts.xml의 패키지가 struts-default 패키지를 상속받는다면 defaultStack을 기본 인터셉터 스택으로 사용하는 것입니다.
<struts> <package name="default" extends="struts-default" namespace=""> ... </package> </struts>
위의 defaultStack에 정의된 인터셉터 중 timer 인터셉터는 정의되어있지 않는데, defaultStack에 timer 인터셉터를 포함한 새로운 스택을 기본 인터셉터 스택으로 사용하고 싶다면 다음과 같이 정의해야 합니다.
(* timer 인터셉터 - Timer Interceptor는 1000분의 1초 단위로 액션의 실행 시간을 콘솔에 출력해주는 기능을 제공합니다. 이 인터셉터가 작동하려면 로깅 프레임워크가 적어도 INFO 수준으로 설정되어 있어야 합니다. 이 인터셉터는 Commons Logging API를 사용합니다.)
<struts> <package name="default" extends="struts-default" namespace=""> <interceptors> <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="timer" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"/>
<action name="myAction" class="example.action.MyAction"> <result>/example/example.jsp</result> </action> </package> </struts>
*** 참고 *** 만약 timer 인터셉터를 액션에 설정하기 위해서 아래와 같이 정의했다면,
<action name="myAction" class="example.action.MyAction"> <interceptor-ref name="timer" /> <result>/example/example.jsp</result> </action>
myAction에는 timer 인터셉터만 걸리게 된다는 점을 주의하세요. 기본 인터셉터 스택이 적용된 후 timer인터셉터가 추가되는 것이 아닙니다.
|