[spring/framework] Action 총 수행 시간을 인터셉터로 구현 +  수 입력이 되지 않을경우.

2022. 2. 23. 23:49비즈니스 탐색/개발

728x90
반응형

(structs 예시 연습)

Struts2 인터셉터(initerceptor) : Action  수행 시간을 인터셉터로 구현

이번에는 Action 전체 수행시간을 확인할  있는 인터셉터를 만들어서 두수의 합을 구하는 Action 붙여보자

 

#Action 수행시간 계산을 위한 Timer.java 작성

extends AbstractInterceptor 클래스를 상속.

클래스 변수로 log를 찍어내고 있다. (이 부분은  콘솔창에 빨간색으로 나오는 부분)

이 log는 println보다 출력하는데에 서버에 부담이 덜간다.

 

intercept가 가지고 있는 ActionInvocation invacation은 컨트롤러에서 액션으로 갈 때 잡히는 부분으로 목적지 액션의 정보를 가지는 것이다.

System.currentTimeMillis()을 log start 현재 시간에 집어넣고.

 

중간에 invoke()메서드가 있어 컨트롤러에서 액션으로 넘어가는 과정이 끝나고 다시 돌아갈 때에도 동작한다.

invoke를 기준으로 위는 전 인터셉터. 아래는 후 인터셉터라는 점! 

 

ⓒjangseonmi

 

액션 클래스 작성(SumAction.java)

 

도메인 오브젝트 / Preparable인터페이스의 prepare 구현 / ModelDriven 인터페이스의 getModel 구현 / result.jsp 에서 sum 값을 참조시키기 위한 .

 

 

mytimer가 만들어놓은 인터셉터를 구현.

prepare가 하는 일은 해당 클래스에 있는 sumaction에 있는 prepare메서드 호출.

modelDriven은 getModel을 호출

params는 파라미터를 대입시켜라는 것을 작업으로 한다.

 

dao생성해서 add dao에 num을 보내고 있다. dto는 파라미터까지 최종적으로 들어가 있는 상태.

 

+ 꼭 set, get이 함께 있어야하는 것은 아니다. 받기만 하는 값이면 get. 주기만 하는 값이면  set이라는 점 알고있다.

 

ⓒjangseonmi

 

실제 비즈니스 로직처리를 위한 SumDAO.java

get num1과 get num2를 더한 값. 

 

ⓒjangseonmi

 

# model 역할을 하는NumberForAdd.java 를 생성하고,

# add.jsp / result.jsp 생성

num1과 num2가 add.action으로. 

 

ⓒjangseonmi

 

add.jsp  실행하자.

브라우저에는 두수와  결과가 출력되지만 이클립스의 콘솔 창에서는 다음과 같이 Action 수행된 시간이 출력된다.

 

정보: Action 수행 시간  >>>>> 2ms

 

 

기존에 만들었던 위 폼을 재수정해보자.

 

 

# 더해지는 두수를 입력하지 않은 경우

staticParam으로 두수를 “0”으로 초기화를 시키면

<action name="add" class="interceptor1.action.SumAction">

<param name=”num1”>0</param>

<param name=”num2”>0</param> //값이 입력되지 않으면 0이 출력.

 

★ 이것이 staticParams! 

 

staticParams Interceptor struts.xml 액션설정에서 params요소로 입력한 값들을 ValueStack 객체에 세팅하는데 상단에 Action 있으므로 Action Property 세팅하게 되는 것이다. 이는 HTTP 요청파라미터와 같은 효과를 나타내는데 staticParams Interceptor params Interceptor 앞에 붙이면 staticParams Interceptor에서 설정한 파라미터를 같은 이름이라면 params Interceptor에서 다시 세팅하게 된다

 staticParams Interceptor에서 세팅하는 값은 default value 성격을 갖게 된다.

★ <interceptor-ref name="staticParams"/> 

파람스보다 위에 있어야한다.

 

 

 경우 form 서브밋하지 않아도 NumberForAdd 객체의 두수가 static 파라미터로 초기화 된다.

 

staticParams Interceptor 다른 기능은 Parameterizable 인터페이스를 구현한 Action parameter Map 세팅한다. Parameterizable 인터페이스에는 3개의 메소드가 있는데 

staticParams Interceptor setParams() 메소드를 통해 Parameter Map 세팅 한다.

 

728x90
반응형