1 / 19

# Struts2 Architecture

# Struts2 Architecture. ■ Debug 방법. Decompiler 이용 Jar 파일 제외 , 원래 java 파일 활용 eUML 활용 log4j.properties 의 옵션변경 ERROR -> DEBUG 실제 동작하는 log 파악 ( 소 스 ). ■ 중요 소스 구조 (1).

xenon
Download Presentation

# Struts2 Architecture

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. #Struts2Architecture

  2. ■ Debug 방법 • Decompiler이용 • Jar파일 제외, 원래 java파일 활용 • eUML활용 • log4j.properties의 옵션변경ERROR -> DEBUG실제 동작하는 log파악 (소스)

  3. ■ 중요 소스 구조(1) • ActionFamily[ActionMapper, ActionProxy,ActionInvocation, ActionContext]Action*.java 형태ActionProxy.java, ActionInvocation.java .. 등 • DefaultAction*.java형태 (기본구현체)

  4. ■ 중요 소스 구조(2) struts2-core-2.0.12.jar xwork-2.0.6.jar

  5. ■ FilterDispatcher • web.xml에 정의됨 • ActionMapper : Action의 invoke가 필요한지 파악함 • ActionProxy : Action의 invoke가 필요한 경우,제어권 반환 • 소스 : FilterDispatcher.java (TW설명) public class FilterDispatcher implements StrutsStatics, Filter{}

  6. ■ ActionMapper (1) • P.182, getMapping() 메소드 호출방식(설명)액션 매핑 생성 • DefaultActionMapper.javapublic class DefaultActionMapper implements ActionMapper {} • P.184 메소드접두어, 액션 접두어리다이렉트접두어,리다이렉트-액션접두어 DefaultActionMapper.java 에서 선언됨(설명)

  7. ■ ActionMapper (2) • 실습(p.185~p.194) • (1.)메소드접두어[method:default] <s:submit name="method:cancel" value="Cancel"/> 예제클릭다른 방법 (struts.xml 수정)<action name=“test” class=“../../../” method=“cancel”> 예제클릭

  8. ■ ActionMapper (3) • (2.)액션 접두어[action:dashboard]<s:submit name="action:methodPrefix3" value=“gogoThing"/> 예제실행 • (3.) 리다이렉트접두어[redirect:cancel.jsp]<s:submit name="redirect:http://www.ahnlab.com" value="Ahnlab.com"/> 예제실행 • (4.) 리다이렉트-액션 접두어[redirect-action:cancel] <s:submit name="redirect-action:methodTest" value="Ahnlab.com"/>

  9. ■ ActionMapper (4) • 커스텀 액션 매퍼 • 레스트풀 액션 매퍼 RestfulActionMapper.java http://host/article/Id ->setArticleId()메소드 필요 • 레프스풀2 액션매퍼 RestfulActionMapper2.javaparam_name/param_value형식으로파라미터는 액션이름 추출 • 혼합 액션 매퍼

  10. ■ ActionProxy / ActionInvocation • 두 항목은 짝을 이루어 구성됨 • ActionInvocation.java UML로 구조파악 (ActionInvocation1.ucd) • ActionProxy : ActionInvocation을 가짐ActionInvocation : 액션인스턴스,인터셉트순서,리절트맵,액션Contex를 가짐 • P.172 serviceAction() 연관관계 (설명)ActionProxy가 생성되는 과정

  11. ■ ActionProxy • ActionProxy는 제어권을 받음 -> 대행자 • 버스기사는 승객의 안전의 책임을 받음 • 운전습관 (커맨드 패턴) • 커맨드 패턴이란?한차원 높은 단계의 캡슐화를 말함메소드 호출을 캡슐화하여, 결정화함

  12. ■ ActionInvocation • P.175 (그림참조)DefaultActionInvocation.javapublic class DefaultActionInvocation implements ActionInvocation {} invoke() 메소드(설명)

  13. ■ ActionContext(1) • 쓰레드 로컬 맵(정의된값,저장)세션맵,액션인보케이션,요청파라미더.등 • ActionInvocation실행되는 동안 쓰레드로 구성됨 • P.180 최초 Actionproxy에 설정DefaultActionProxyFactory.java{createActionProxy (){ ActionProxy proxy = new DefaultActionProxy( ) }}

  14. ■ ActionContext(2) • 쓰레드 로컬 스토리지(시연소스) • 정의스레드별 유일한 오브젝트를 만들때 사용TreadLocal class사용 • Action에 필요한 모든 정보 • WAS 사용시client 요청 -> Thread 할당한100개의 요청 -> 100개의 Thread 생성

  15. ■ 정리 (잠시 쉬어가기) • (1.)필터 • (2.) proxy : 액션 실행 위임 대리자 • (3.) invocation : 대리자의 명령을 실제인터셉터와 액션,result을 실행 • (4.) context : 실행에 필요한 모든 정보 * (2,3,4)는모두 한쌍이다.요청시 마다 새로 생성,응답 까지 함께함

  16. ■ Interceptors • 액션 전,후의 호출을 가로채는 객체(spring의 AOP와 비슷한 역할) • com.opensymphony.xwork2.interceptor.Interceptor.java위 Interface를 구현해서 만든다.void init();void destory();String intercept(ActionInvocation invocation) • AbstractInterceptor.java Interceptor.java를 구현한 추상클래스init(), destory(); -> 초기화가 많이 필요없음

  17. ■ Interceptors (사용자 구현) • 사용자가 구현한 Interceptor예제실행 • 중요 소스public class TimerInterceptor extends AbstractInterceptor {}String result = invocation.invoke();<interceptors><interceptor name="timerer" class="exam.chapter4.TimerInterceptor" /></interceptors> <action name="goMethodPrefixPage"> <interceptor-ref name="timerer" /> <interceptor-ref name="logger" /> <result>/WEB-INF/jsp/chapter4/methodPrefix.jsp</result> </action>

  18. ■ Interceptors(default) • struts-default.xml • 앨리어스 <param name="aliases"> #{'name':'pName','modelNo':'pNo'}</param> <interceptor-ref name="alias" /> com.opensymphony.xwork2.interceptor.AliasInterceptor.java • 체인valueStack을 복사하여, 다른 Action에서 사용함com.opensymphony.xwork2.interceptor.ChainingInterceptor.java • 프리페어Preparable인터페이스 구현 -> prepare()메소드 호출com.opensymphony.xwork2.interceptor.PrepareInterceptor.java예제클릭

  19. ■ Interceptors(default) • 기능별 분류유틸리티 (timer, logger)프로퍼티(params, chain 등등)위크플로우(workflow, validation 등등) • Filter 와의 차이점서블릿 컨테이너에 묶이는 여부 Interceptor : action 마다 생성됨

More Related