Interceptors에 대한 자세한 내용은 struts.apache.org를 참조한다.
http://struts.apache.org/2.0.14/docs/interceptors.html
■ Interceptor의 내부적인 구조를 간단하게 그린 그림이다.
1) preparable : Client로 부터 전달된 모든 데이타 들은 모두 preparable로 들어오며,
form의 파라미터로 정의 되어있는 그 파라미터의 이름을 통해서 다음 구현할 액션 각각
의 setter를 정의하고 거기에 있는 객체를 생성, 초기화 해주는 역할을 한다.
2) stack : preparable으로 넘어온 데이타에 대해 렌더링을 수행하고 그 결과를 Action으로 호출한다.
3) Action : execute method 메소드 만을 수행한다.(비즈니스 로직 수행)
4) ModelDriven : 결과를 result로 주는 역할을 담당한다.
■ Interceptors 에 대한 간단한 설명.
있어, 관심사 분리와 크로스 커팅 코드를 할 수 있게 해준다
핵심 기능들은 인터셉터로 구현되어있다.
■ 인터셉터의 대표적인 기능
타입 변환, 객체 파퓰레이션, 유효성 검사, 파일 업로드, 출력 페이지 준비 등과 같은 기능들은 모두 인터셉터의 도움으로 구현된다.
default interceptor는 struts-default.xml에서 정의되어있다.
Struts2는 Interface기반 이다. Interceptors를 implements 구현하기 위해서는 preparable, action, modeldriven 이 세가지를 꼭 구현해야 한다.
■ 간단한 소스 보기 : Class에서 적용된 경우
package interceptor1.action;
import interceptor1.dao.SumDAO;
import interceptor1.model.NumberForAdd;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
public class SumAction implements Action, Preparable, ModelDriven { // 3가지만 구현하면 다양하게 구현할 수 있다.
//도메인 오브젝트
NumberForAdd num;
private int sum = 0;
@Override
public String execute() throws Exception { // 2단계
SumDAO dao = new SumDAO();
sum = dao.add(num);
return SUCCESS;
}
//Preparable인터페이스의 prepare 구현
@Override
public void prepare() throws Exception {
num = new NumberForAdd(); //1단계 : form에서 넘오는 값들을 property가 같은 곳에다가(stack에서 온) 넣어준다.
}
//ModelDriven 인터페이스의 getModel 구현
@Override
public Object getModel() { //3단계 리턴
return num;
}
//result.jsp 에서 sum 값을 참조시키기 위해
public int getSum() {
return sum;
}
}
맨 위의 Interceptors가 내부적으로 돌아가는 그림 처럼 1, 2, 3 단계로 수행한다.
■ interceptor1.xml 보기 : 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>
<package name="struts2" extends="struts-default">
<!-- 자신이 만든 interceptor는 action 밖에서 사용하고, 존재하는 interceptor의 사용은 action에서 사용한다 -->
<interceptors> <!-- 직접 만든 interceptor -->
<interceptor name="mytimer" class="interceptor.Timer"/>
</interceptors>
<action name="add" class="interceptor1.action.SumAction">
<interceptor-ref name="mytimer"/> <!-- 제공되는 interceptor 들-->
<interceptor-ref name="prepare"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="params"/>
<result>/result.jsp</result>
</action>
</package>
</struts>
자세한 내용은 소스 참조. 간단한 예제 포함.
Struts2 Interceptor 1.
'FrameWork > Struts2' 카테고리의 다른 글
Struts2 + Spring 연동, + iBatis (1) | 2009.07.09 |
---|---|
Struts2에서 Action에 있는 데이타로 JSP에서 보여주기. (0) | 2009.07.09 |
Struts2 Interceptor(인터셉터) 2. (0) | 2009.07.09 |
Struts2에서 freemarker-2.3.8.jar와 ognl-2.6.11.jar 에 대한 내용. (0) | 2009.07.08 |
Struts2에서 Tiles Plugin 사용하기. (1) | 2009.07.08 |
Struts2 에서 upload & download 하기 3. (0) | 2009.07.07 |
Struts2 에서 upload & download 하기 2. (0) | 2009.07.07 |
Struts2 에서 upload & download 하기 1. (0) | 2009.07.06 |
Struts2 에서 session 처리하는 방법(로그인, 로그아웃 해보기). (0) | 2009.07.05 |
Struts2 에서 validator 사용하기. (0) | 2009.07.05 |