struts2 – 아키텍처
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍
실무교육센터
Struts2에서 모든 Request 는 Struts2의 필터인 FilterDispatcher가 처리하며 필터를 통과하면서 아래와 같은 일들이 일어난다.
FilterDispatcher는 요청이 들어오면 ActionProxy 인스턴스를 생성하고 ActionProxy 는 인터셉터와 Result 등 실행 구성(struts.xml)을 읽어와서 ActionInvocation 을 초기화하고 실행시키는데 ActionInvocation은 실질적인 Interceptor, Action, result의 실행을 담당한다.
1. ActionContextCleanUp Filter
다른 기술들과 함께 사용할 경우 (SiteMesh PlugIn등) 유용한 옵션인데 web.xml에 SiteMesh등이 정의되어 있지 않다면 Struts에서 생성한 Thread Local을 FilterDispatcher가 비우지만 정의되어 있다면 비우지 않는다. 즉 Struts2 아키텍처 외부에서 사용한 SiteMesh와 같은 Thread Local을 비우기 위해서는 외부에서 Context를 Clear해야 하므로 정의한 것이다. 사실 SiteMesh를 위한 것이니 필수 사항은 아니다.
2. FilterDispatcher
ActionMapper를 이용하여 어떠한 Action을 실행할지 혹은 실행하지 않을지 결정하는 일을 하는 것이 FilterDispatcher 인데 Action을 실행해야 하는 경우 ActionProxy의 인스턴스를 생성하는데 이때 인자로 컨텍스트맵(ContextMap)을 사용하는데 ContextMap은 요청 파라미터, 애플리케이션맵, 세션맵, Locale, ServletRequest , ServletResponse 등을 갖고 있다.
3. ActionProxy
struts.xml을 로드한 ConfigurationManager를 이용하여 인터셉터, Result 등 액션실행 구성을 읽어 들여서 ActionInvocation 인스턴스를 만들고 실행한다.
4. ActionInvocation
액션 인스턴스를 만들어 ValueStack 에 Push 하고 ActionContext 를 생성한다. 액션이 실행될때 인터셉터의 intercept() 메서드와 액션의 execute(), result가 실행되면서 JSP 또는 Template을 렌더링 한다. 이후 Interceptor들이 역순으로 수행되며 마지막으로 response를 리턴한다. 그 다음 ActionContextCleanUp Filter가 정의되지 않았다면 FilterDispatcher가 Thread Local을 청소한다.
5. ActionContext
애플리케이션맵, 세션맵, 요청 파라미터, locale, ActionInvocation, ValueStack, ServletRequest, ServletResponses 등 액션을 실행하는데 필요한 모든 정보를 가지고 있는 Thread-local 오브젝트
위 ActionProxy, ActionInvocation, ActionContext 그리고 Action instance는 모두 한 쌍이며 매 요청 시 마다 새로 생성되어 응답을 보낼 때까지 같이 일을 한다.
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
Struts2에서 모든 Request 는 Struts2의 필터인 FilterDispatcher가 처리하며 필터를 통과하면서 아래와 같은 일들이 일어난다.
FilterDispatcher는 요청이 들어오면 ActionProxy 인스턴스를 생성하고 ActionProxy 는 인터셉터와 Result 등 실행 구성(struts.xml)을 읽어와서 ActionInvocation 을 초기화하고 실행시키는데 ActionInvocation은 실질적인 Interceptor, Action, result의 실행을 담당한다.
1. ActionContextCleanUp Filter
다른 기술들과 함께 사용할 경우 (SiteMesh PlugIn등) 유용한 옵션인데 web.xml에 SiteMesh등이 정의되어 있지 않다면 Struts에서 생성한 Thread Local을 FilterDispatcher가 비우지만 정의되어 있다면 비우지 않는다. 즉 Struts2 아키텍처 외부에서 사용한 SiteMesh와 같은 Thread Local을 비우기 위해서는 외부에서 Context를 Clear해야 하므로 정의한 것이다. 사실 SiteMesh를 위한 것이니 필수 사항은 아니다.
2. FilterDispatcher
ActionMapper를 이용하여 어떠한 Action을 실행할지 혹은 실행하지 않을지 결정하는 일을 하는 것이 FilterDispatcher 인데 Action을 실행해야 하는 경우 ActionProxy의 인스턴스를 생성하는데 이때 인자로 컨텍스트맵(ContextMap)을 사용하는데 ContextMap은 요청 파라미터, 애플리케이션맵, 세션맵, Locale, ServletRequest , ServletResponse 등을 갖고 있다.
3. ActionProxy
struts.xml을 로드한 ConfigurationManager를 이용하여 인터셉터, Result 등 액션실행 구성을 읽어 들여서 ActionInvocation 인스턴스를 만들고 실행한다.
4. ActionInvocation
액션 인스턴스를 만들어 ValueStack 에 Push 하고 ActionContext 를 생성한다. 액션이 실행될때 인터셉터의 intercept() 메서드와 액션의 execute(), result가 실행되면서 JSP 또는 Template을 렌더링 한다. 이후 Interceptor들이 역순으로 수행되며 마지막으로 response를 리턴한다. 그 다음 ActionContextCleanUp Filter가 정의되지 않았다면 FilterDispatcher가 Thread Local을 청소한다.
5. ActionContext
애플리케이션맵, 세션맵, 요청 파라미터, locale, ActionInvocation, ValueStack, ServletRequest, ServletResponses 등 액션을 실행하는데 필요한 모든 정보를 가지고 있는 Thread-local 오브젝트
위 ActionProxy, ActionInvocation, ActionContext 그리고 Action instance는 모두 한 쌍이며 매 요청 시 마다 새로 생성되어 응답을 보낼 때까지 같이 일을 한다.
댓글 없음:
댓글 쓰기