ART of WEB

"엑수시아"

struts2 :: 사용자 인터셉터 예제

[2015-08-30 블로그 이전 안내]

안녕하세요. 서토리(구 필명 엑수시아)입니다. 전문적인 개발 블로그로 다시 태어나기 위해 부득이하게 블로그를 이전하게 되었습니다. 앞으로는 아래의 주소로 접속 부탁드립니다. 감사합니다.

서토리 블로그 바로가기

사용자 인터셉터 만들기 기본형태

public abstract class AbstractInterceptor implements Interceptor {
	public void init(){}
	public void destroy(){}
	public abstract String intercept(ActionInvocation invocation) throws Exception;
}


간단한 사용자 인터셉터 만들어 보기.

0. 예제 개요

- add.jsp에서 두수를 입력하고 submit한다.

- SumAction이 이를 받아 두수의 합을 리턴하면 result.jsp에서 두 수 및 그 합을 출력한다.


SumAction이 실행되기 전에 Action의 수행시간을 계산하기 위한 mytimer, prepare(Model빈을 초기화, 인스턴스생성), odelDriven(초기화된 모델빈을 ValueStack의 상단에 로딩), params (ValueStack의 상단에 있는 빈에 사용자의 요청 파라미터를 세팅)와 같은 인터셉터를 붙였다.


1. 먼저 액션단을 작성한다.

package interceptor1.action;

import interceptor1.*;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;



public class SumAction implements Action, Preparable, ModelDriven{
	
	NumberForAdd num;
	private int sum=0;
	
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		SumDAO dao=new SumDAO();
		sum=dao.add(num);
		return SUCCESS;
	}
	
	@Override
	public void prepare() throws Exception {
		// TODO Auto-generated method stub
		num=new NumberForAdd();
		
	}
	
	@Override
	public Object getModel() {
		// TODO Auto-generated method stub
		return num;
	}
	
	public int getSum(){
		return sum;
	}
}


2. 간단한 빈객체 생성.

package interceptor1.action;

public class NumberForAdd {
	
	private int num1;
	private int num2;
	public int getNum1() {
		return num1;
	}
	public void setNum1(int num1) {
		this.num1 = num1;
	}
	public int getNum2() {
		return num2;
	}
	public void setNum2(int num2) {
		this.num2 = num2;
	}
	
}


3. 간단한 dao 클래스 생성 (여기선 간단한 합계산을 한다.)

package interceptor1.action;

import interceptor1.*;

public class SumDAO {

	public int add(NumberForAdd num){
		return num.getNum1()+num.getNum2();
	}
}


4. 본격적으로 사용자 인터셉터를 만들어 준다.

주의 할 것은 상속을 AbstractInterceptor를 상속받는 다는 점이다.

package interceptor;

import java.awt.event.InvocationEvent;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class Timer extends AbstractInterceptor{
	
	private static Log log=LogFactory.getLog(Timer.class);
	
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		
		long start=System.currentTimeMillis();
		
		String result=invocation.invoke();
		
		long execTime=System.currentTimeMillis()-start;
		
		log.info("Action 수행시간 >>>>>"+execTime+"ms");
		
		return result;
	}

}


5. 마지막으로 struts.xml 을 수정해 준다.

주의 할 것은 액션 안에 사용자 인터셉터를 지정해 주었다는 것이다.

<interceptors> <interceptor name="mytimer" class="interceptor.Timer"> </interceptor></interceptors>


<interceptor-ref name="mytimer">

<package name="interceptor" extends="struts-default">
	<interceptors>
		<interceptor name="mytimer" class="interceptor.Timer" />
	</interceptors>
	<action name="add" class="interceptor1.action.SumAction">
		<interceptor-ref name="mytimer" />
		<interceptor-ref name="prepare" />
		<interceptor-ref name="modelDriven" />
		<interceptor-ref name="params" />
		<result>/interceptor/result.jsp</result>
	</action>
</package>


6. 결과 확인

1. view 단

2. 콘솔 (여기에서 사용자 인터넵터가 제대로 되었는지 확인 할 수 있다.)

태그목록> , , , , , , , , ,

COMMENT

비밀글 Add Comment
  1. BlogIcon OCer ㆍ2012.05.05 12:13 신고ReplyEdit

    자바인가? 해서 쭉..보니 자바 카테고리였군요..ㅎㅎ

    오버라이드.. 오랜만에 보네요..

    이젠 자바는 대충 뭐였는지 감도 안오는군요..ㅜ.ㅜ

    • BlogIcon 엑수시아 ㆍ2012.05.06 01:35 신고Edit

      리뷰쪽과 카메라에만 조예가 있으신 줄 알았는데..
      프로그래밍까지!!
      그래도 한번 해보셨으니까 관심을 가지시면 금방 따라하시겠네요..
      전 무지해서 엄청 고생하고 있습니다.;;; ㅎ