Struts1에서는 추상 기본 클래스를 상속하기 위해 Action 클래스가 필요합니다. Struts1의 일반적인 문제는 인터페이스 대신 추상 클래스를 사용하여 프로그래밍하는 것입니다.
Struts 2 Action 클래스는 Action 인터페이스 또는 기타 인터페이스를 구현하여 선택적이고 맞춤화된 서비스를 가능하게 합니다. Struts2는 일반적으로 사용되는 인터페이스를 구현하기 위해 ActionSupport 기본 클래스를 제공합니다. Action 인터페이스는 필요하지 않습니다. 실행 식별자가 있는 POJO 객체는 Struts2의 Action 객체로 사용될 수 있습니다.
스레드 모드:
Struts1 Action은 싱글톤 모드이며 하나의 Action 인스턴스만 모든 요청을 처리하므로 스레드로부터 안전해야 합니다. 싱글톤 전략은 Struts1 Action이 수행할 수 있는 작업을 제한하므로 개발 중에는 특별한 주의가 필요합니다. 작업 리소스는 스레드로부터 안전하거나 동기화되어야 합니다.
Struts2 Action 개체는 각 요청에 대해 인스턴스를 생성하므로 스레드 안전 문제가 없습니다. (실제로 서블릿 컨테이너는 요청당 폐기 가능한 객체를 많이 생성하며 성능 및 LJ 재활용 문제를 일으키지 않습니다.)
서블릿 종속성:
Struts1 Action은 Action이 호출될 때 HttpServletRequest와 HttpServletResponse가 실행 메소드로 전달되기 때문에 Servlet API를 사용합니다.
Struts 2 Action은 컨테이너에 의존하지 않으므로 컨테이너와 독립적으로 Action을 테스트할 수 있습니다. Struts2 Action은 필요한 경우 원래 요청과 응답에 계속 액세스할 수 있습니다. 그러나 다른 요소는 HttpServetRequest 및 HttpServletResponse에 직접 액세스할 필요성을 줄이거나 제거합니다.
테스트 가능성:
Struts 1 Actions 테스트의 주요 문제점은 실행 메소드가 서블릿 API를 노출한다는 것입니다(이로 인해 테스트는 컨테이너에 종속됩니다). 타사 확장 기능인 Struts TestCase는 Struts1 모의 객체 세트(테스트용)를 제공합니다.
Struts 2 Action은 초기화, 속성 설정 및 메서드 호출을 통해 테스트할 수 있습니다. "종속성 주입" 지원도 테스트를 더 쉽게 만듭니다.
입력 캡처:
Struts1은 ActionForm 객체를 사용하여 입력을 캡처합니다. 모든 ActionForm은 기본 클래스를 상속해야 합니다. 다른 JavaBeans는 ActionForms로 사용할 수 없기 때문에 개발자는 입력을 캡처하기 위해 중복 클래스를 만드는 경우가 많습니다. Dynamic Beans(DynaBeans)는 기존 ActionForms 생성의 대안으로 사용될 수 있습니다. 그러나 개발자는 기존 JavaBeans를 다시 설명(생성)할 수 있습니다(여전히 중복된 Javabeans가 생성됨).
Struts 2는 Action 속성을 입력 속성으로 직접 사용하므로 두 번째 입력 객체가 필요하지 않습니다. 입력 속성은 자체 (하위) 속성을 가진 풍부한 개체 유형일 수 있습니다. 작업 속성은 웹 페이지의 taglibs를 통해 액세스할 수 있습니다. Struts2는 ActionForm 모드도 지원합니다. 비즈니스 개체를 포함한 다양한 개체 유형을 입력/출력 개체로 사용할 수 있습니다. 이 ModelDriven 기능은 POJO 입력 개체에 대한 taglib의 참조를 단순화합니다.
표현 언어:
Struts1은 JSTL을 통합하므로 JSTL EL을 사용합니다. 이 EL에는 기본적인 객체 그래프 순회 기능이 있지만 컬렉션 및 인덱싱된 속성에 대한 지원은 약합니다.
Struts2는 JSTL을 사용할 수 있지만 더 강력하고 유연한 표현 언어인 "Object Graph Notation Language"(OGNL)도 지원합니다.
값을 페이지(보기)에 바인딩합니다.
Struts 1은 액세스를 위해 객체를 페이지에 바인딩하기 위해 표준 JSP 메커니즘을 사용합니다.
Struts 2는 "ValueStack" 기술을 사용하여 페이지(뷰)를 객체에 바인딩하지 않고도 taglib가 값에 액세스할 수 있도록 합니다. ValueStack 전략을 사용하면 이름은 동일하지만 유형이 다른 일련의 속성을 통해 페이지(뷰)를 재사용할 수 있습니다.
유형 변환:
Struts 1 ActionForm 속성은 일반적으로 String 유형입니다. Struts1은 유형 변환을 위해 Commons-Beanutils를 사용합니다. 클래스당 하나의 변환기, 인스턴스당 구성할 수 없습니다.
Struts2는 유형 변환을 위해 OGNL을 사용합니다. 기본 개체와 일반적으로 사용되는 개체에 대한 변환기를 제공합니다.
확인하다:
Struts 1은 ActionForm의 유효성 검증 메소드에서 수동 검증을 지원하거나 Commons Validator의 확장을 통한 검증을 지원합니다. 동일한 클래스라도 다른 검증 내용을 가질 수 있지만, 하위 객체는 검증할 수 없습니다.
Struts2는 verify 메소드와 XWork 검증 프레임워크를 통해 검증을 지원합니다. XWork 유효성 검사 프레임워크는 속성 클래스 유형에 대해 정의된 유효성 검사 및 콘텐츠 유효성 검사를 사용하여 체인 유효성 검사 하위 속성을 지원합니다.
액션 실행 제어:
Struts1은 각 모듈에 대해 별도의 요청 프로세서(라이프 사이클)를 지원하지만 모듈의 모든 작업은 동일한 라이프 사이클을 공유해야 합니다.
Struts2는 인터셉터 스택을 통해 각 Action에 대해 서로 다른 라이프사이클 생성을 지원합니다. 필요에 따라 스택을 다양한 작업과 함께 사용할 수 있습니다.
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/Ryan_lz/archive/2009/12/29/5101758.aspx