@ Action 인터페이스 : 스트럿츠2 환경이 제공하는 result 코드를 사용 가능하며 execute()메소드를 오버라이딩해야 함

@ 인터셉터(interceptor)는 액션의 호출을 동적으로 가로채는 객체로써 다양한 기능을 제공한다.
<interceptor-ref name="" />

@ <interceptor-ref name="" />는 스트럿츠2 디폴트 설정 파일 struts-default.xml파일에 <interceptor /> 요소가 정의되어 있다. 묵시적으로 struts-default.xml파일이 인클루드 되어 있고 보통 <package>태그에서 extends="struts-default"를 기술하기에 struts-default.xml파일의 struts-default패키지를 상속받아 인터셉터를 사용할 수 있는 것이다.

@ <interceptor-ref name="params"/> 은 해당 객체가 인스턴스화 될때 요청 시 전달되는 파라미터를 읽어 액션의 setter를 호출한다.

@ 스트럿츠2에서 한글 설정
- 톰캣 server.xml에서 <Connector />요소에 useBodyEncodingForURI="true"속성을 지정(클라이언트에서 온 get/post 모두 리퀘스트에 설정된 캐릭터 셋으로 처리한다는 의미)
- web.xml에 다음과 같이 추가
 <filter>
   <filter-name>struts2</filter-name>
   <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>

  </filter>
-해당 jsp의 언어셋을 UTF-8로 지정

@ ActionSupport 클래스는 데이터 검증을 위한 Validateable,ValidationAware 인터페이스, 지역화 및 국제화 기능을 위한 TextProvider, LocaleProvider 인터페이스를 구현하고 있다.

@ workflow 인터셉터
액션에 정의한 validate() 메소드를 호출한 후에 에러가 있으면 INPUT을 리턴한다. ValidationAware 의addFieldError()메서드에 의해 ${fieldErrors.프로퍼티명}에 의해 오류 메시지가 찍힌다. 에러가 없으면 execute()메서드를 호출한다.

@ <input>태그의 name속성 값을 도메인 오브젝트(Beans랑 비슷).속성명 ( ex user.userId)로 지정하면 params 인터셉터가 액션의 getUser().setUserId()를 호출한다.

@ 위와 같이 도메인 오브젝트를 입력폼에 명시적으로 기술하는 것은 view영역과 model영역의 결합도가 높아짐을 의미한다. 이 결합도를 낮추기 위해 ModelDriven 인터페이스를 구현한다. ModelDriven 의 getModel()메서드를 오버라이딩하여 도메인 오브젝트 인스턴스를 얻을 수 있다. 

@ Preparable인터페이스는 액션의 메서드(execute)를 실행하기 전에 다른 로직을 실행하고 싶을 때 사용한다. 보통 Preparable인터페이스는 ModelDriven인터페이스와 함께 사용하는데 modelDriven인터셉터가 사용할 도메인 오브젝트를 prepare()메서드에 미리 인스턴스화해준다.
<interceptor-ref name="prepare"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="params"/>

 
Posted by Taoist
,