Spring Web Flow(SWF)는 웹 애플리케이션내 페이지 흐름(flow)의 정의와 수행에 집중하는 Spring프레임워크 웹 스택의 컴포넌트이다.
시스템은 다른 위치에서 재사용될수 있는 자족적 모듈처럼 웹 애플리케이션의 로직적인 흐름(flow)을 획득하는 것을 허용한다. 이러한 흐름(flow)은 비지니스 프로세스의 구현을 통해 단일 사용자를 안내하고 단일 사용자 대화를 표현한다. 흐름(flow)은 종종 HTTP요청에 대해 수행되고 상태를 가지며, 트랜잭션적인 특징을 보이고 동적이고/이거나 오랜시간 구동될것이다.
Spring Web Flow는 추상화의 좀더 높은 레벨에 존재하고 Struts, Spring MVC, Portlet MVC, 그리고 JSF와 같은 기본 프레임워크내에서 자족적인 페이지 흐름(flow) 엔진(page flow engine)처럼 통합된다. SWF는 선언적이고 높은 이식성을 가지며 뛰어난 관리능력을 가지는 형태로 명시적으로 애플리케이션의 페이지 흐름(flow)을 획득하는 기능을 제공한다. SWF는 제한된 상태 머신에 기초하여 MVC에서 완전한 "C"를 할당하는 강력한 컨트롤러 프레임워크이다.
Spring Web Flow는 여타의 API에 대한 몇가지 요구 의존성을 가진 자족적인 page flow engine처럼 구조화되었다. 모든 의존성은 주의깊게 관리된다.
최소한 Spring Web Flow를 사용하기 위해 필요한 것은 :
spring-webflow (프레임워크)
spring-core (프레임워크에 의해 내부적으로 사용되는 다양한 유틸리티 클래스)
spring-binding (내부적으로 사용되는 Spring 데이터 바인딩 프레임워크)
commons-logging (내부적으로 사용되는 간단한 로깅 외형)
대부분의 사용자들은 좀더 큰 웹 애플리케이션 개발 프레임워크내 컴포넌트로 SWF를 깨워넣을것이다. SWF는 요청 맵핑과 응답 표현을 다루기 위한 호출 시스템을 기대하는 컨트롤러 기술에 집중한다. 이 경우, 이러한 사용자는 환경을 위한 가는(thin) 통합 조각에 의존할것이다. 예를 들어, Servlet내 수행 흐름(flow)은 SWF에 대한 요청에 대한 할당(dispatch)과 SWF view선택을 책임지는 표현을 다루는 Spring MVC통합을 사용한다.
Spring처럼, Spring Web Flow는 그들이 필요한 부분을 사용하는 것을 허용하는 방법으로 패키징되는 계층화된(layered) 프레임워크라는 것을 아는게 중요하다. 예를 들어, 한팀은 Spring MVC를 가지고 Servlet환경에서 Spring Web Flow를 사용할것이고 Spring MVC통합을 필요로 할것이다. 다른 팀은 Portlet 환경에서 SWF를 사용할것이고 Portlet MVC통합을 필요로 할것이다. 그 외 다른 팀은 여러개를 섞을것이다. SWF의 중요한 이득은 어떤 환경에서도 수행될수 있는 자족적인 컨트롤러의 모듈 재사용하여 정의할수 있도록 하는 것이다.
이 부분은 SWF 코드기반 로직적인 패키지 구조의 개요를 제공한다. 패키지 각각을 위한 의존성은 명백하게 기록되어 있다.
webflow 패키지는 프레임워크의 중심 기능적인 추상화를 포함한다. 이러한 추상화는 흐름(flow)을 표시하가 위한 핵심 "도메인 언어(domain language)"를 정의하는 Flow, State, 그리고 Action과 같은 정의로 구성된다.
의존성 : spring-core, spring-binding, commons-logging
action 패키지는 Flow내 임의의 명령로직을 수행하기 위한 핵심 "Action"추상화의 구현을 포함한다.
의존성 : webflow, spring-beans (선택사항), spring-context (선택사항)
builder 패키지는 Java또는 XML파일과 같은 외부 자원으로부터 Flow를 빌드하고 조합하기 위한 설정시각에 사용되는 추상화를 포함한다.
의존성 : webflow, webflow.support
execution 패키지는 Flow를 수행하고 flow수행을 관리하기 위한 런타임 추상화를 포함한다. 이것은 Spring Web Flow의 제한된 상태 머신의 구현물이 위치하는 곳이다. 이것은 또한 하나의 요청을 넘어선 실제 흐름(flow) 수행을 서버로 저장하기 위한 저장소 하위 시스템이 위치하는 곳이기도 하다. 이 하위시스템은 Spring Web Flow의 continuation server를 위한 기초를 형성한다.
의존성 : webflow, webflow.util, commons-codec (선택사항)
executor 패키지는 프레임워크내 가장 높은 레벨의 패키지이다. 이것은 흐름(flow)의 수행을 다루는 "flow executors"의 구현물을 포함한다. 이것은 Spring Web Flow시스템으로 호출하는 외부 시스템을 위한 외관이다. 이것은 또한 Spring MVC (Servlet 과 Portlet), Struts, 그리고 Java Server Faces (JSF)를 위한 레이어를 통합하는 곳이다.
의존성 : webflow.execution, spring-webmvc (선택사항), spring-portlet (선택사항), Struts (선택사항), Java Server Faces (선택사항).
registry 패키지는 수행에 적격인 흐름(flow) 정의의 등록을 관리하기 위한 하위시스템을 포함한다.
의존성 : webflow, webflow.builder, webflow.execution, spring-beans (선택사항)
support 패키지는 핵심적인 정의 생산물의 일반적인 목적의 구현물을 포함한다. 이러한 구현물은 프레임워크의 다른 패키지에 의해 내부적으로 주로 사용되지만 개발자에 의해 직접 사용될수도 있다.
의존성 : webflow
test 패키지는 Action을 격리하는것과 같은 단위 테스팅만큼 컨테이너외부에서 Flow Execution을 테스트하기 위한 지원을 포함한다.
의존성 : webflow, webflow.execution, junit
패키지 의존성은 의존성이 패키지를 컴파일하기 위해 필요하다는것을 의미하지만 런타임시 선택적으로 필요하다는 것을 의미한다는 것을 알라. 예를들어, Servlet환경에서 Spring Web Flow의 사용은 context.servlet 패키지의 사용을 수반하고 classpath내 Servlet API를 요구한다. 하지만 Portlet API는 요구하지 않는다.
지원되는 제품의 사용 설정만큼 의존성의 정확한 목록을 위해, spring-webflow/ivy.xml에서 SWF배포판내 위치한 SWF ivy의존성 관리자의 배치자를 보라.