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