В этой статье я кратко расскажу о Spring Web Flow 2. Если вы не знакомы со Spring Framework и Spring MVC, то вам лучше начать с чего-то более простого, например:
- со статьи “Что такое Spring Framework“;
- с официального руководства по Spring Framework;
- с рассмотрения примеров применения Spring.
Поехали!
Spring Web Flow – это open-source фреймворк для разработки web-приложений. SWF является частью портфолио продуктов Spring (Spring product portfolio).
“Это очередной фреймворк для разработки web-приложений, коих уже сотни”, – скажете вы и будете правы. SWF – это еще один MVC-фреймворк, но выделяется он среди других тем, что позволяет настроить порядок вызова страниц в web-приложении.
Web Flow является надстройкой над Spring MVC. На следующем рисунке изображен стек технологий, на которых основан SWF.

Стек технологий Spring
На ядре Spring Framework базируются все модули из портфолио Spring. Оно позволяет управлять инъекцией зависимостей и предоставляет инструменты для аспектно-ориентированного программирования (AOP).
Spring MVC – это основа web-фреймворка от Spring. Предоставляет полноценную реализацию паттерна Model – View – Controller.
Что такое Spring Web Flow
SWF позволяет создавать диалоговые web-приложения. Это означает что пользователи смогут общаться с приложением достаточно естественным способом: приложение запрашивает данные, пользователь вводит их, приложение обрабатывает данные и принимает решение о том, на какой шаг работы перевести пользователя. Такая организация интерфейса называется wizard-like.
Обычно, wizard-like приложение содержит несколько страниц, отображаемых одна за другой. Вы вводите какую-то информацию и переходите к следующей странице, на которой вводите дополнительную информацию и т.д. Если вы поняли, что сделали ошибку, то возвращаетесь на предыдущую страницу, на которой можете просмотреть введенную вами информацию и изменить ее, если нужно.
Хоть вы и можете возвращаться назад, тем не менее, вы работаете по предопределенному автором приложения сценарию – потоку. Поток – это последовательность шагов и переходов между ними. Также частью потока являются события, которые происходят в контексте этого потока. Каждый поток имеет определенную цель, например, заказ книги или создание нового аккаунта пользователя.
Вы можете создать такое приложения и без помощи Web Flow, например с помощью чистого Spring MVC, но Spring Web Flow предоставляет специальные инструменты для этого, что значительно упрощает разработку подобных приложений.
Элементы Spring Web Flow: поток (flow), представление (view) и диалог (conversation)
Основу технологии SWF составляют три элемента:
- поток;
- представление;
- диалог.
Поток
Поток – это самодостаточное представление случая использования (use case) бизнес-процесса реального мира. Проще говоря – это последовательность шагов, ведущих к решению какой-либо задачи. С технической точки зрения, поток инкапсулирует re-usable последовательность шагов, которые могут выполняться в различных контекстах. Поток описывает порядок отображения пользователю представлений и требующиеся данные для навигации по потоку.
Представление
Представление в Spring Web Flow – это страница с визуальной информацией. Spring Web Flow 2 поддерживает две технологии представлений: JSP и JSF Facelets.
Диалог
В обычном (традиционном) web-приложении, вы располагаете тремя основными областями видимости: request, session и application. В большинстве случаев, web-приложение состоит из более чем одной страницы. Следовательно, вам требуется больше, чем request, но в то же время session – это слишком широкая область видимости. Вам нужно что-то среднее между request и session. Spring Web Flow для этого вводит концепцию диалога (conversation).
Для более наглядного представления структуры потока приведу следующую картинку:

Структура потока (flow)
Представьте, что у вас есть сайт, на котором пользователь должен залогиниться чтобы прочитать информацию. Есть три страницы: login.xhtml, portal.xhtml, и error.xhtml. Страница login.xhtml отображается когда пользователь заходит на сайт и еще не прошел процедуру логина. Если пользователь правильно ввел имя и пароль, он перенаправляется на страницу portal.xhtml, если же неправильно – на страницу error.xhtml. Графически это можно представить следующим образом:

Пример потока: Логин
Поток описывает оба возможных исхода: удачный логин и безуспешный. Кроме того, переходы между страницами тоже описываются в потоке. Все данные хранятся в диалоге в течение всего жизненного цикла потока. В данном примере, например, данные могут храниться в классе User.
Модульная структура SWF 2
Если вы скачаете Spring Web Flow 2 (http://www.springframework.org/download), то увидите, что в каталоге dist лежит четыре jar-файла:
- Модуль Spring Web Flow – org.springframework.webflow-2.0.7.RELEASE.jar. Это сам фреймворк (ядро). Он управляет обработкой потока с его переходами и представлениями.
- Модуль Spring Faces – org.springframework.faces-2.0.7.RELEASE.jar. Это модуль для интеграции Spring Web Flow и технологии JavaServer Faces.
- Модуль Spring JavaScript – org.springframework.js-2.0.7.RELEASE.jar. Предоставляет возможность работать с Ajax.
- Модуль Spring Binding – org.springframework.webflow-2.0.7.RELEASE.jar. Это модуль, который помогает привязывать данные к элементам (например, к HTML-элементам).
На этом заканчиваю краткое введение в Spring Web Flow 2. Следующая статья будет называться “Spring Web Flow 2 в действии”. В ней мы рассмотрим приемы описания потоков и создадим рабочее web-приложение. А пока рекомендую почитать Spring Web Flow Reference Guide. И сам почитаю
Пост получился какой-то размытый, но это все потому, что сам только начал разбираться с этой технологией. Разбираюсь по книге “Spring Web Flow 2 Web Development” авторов Sven Lüppken и Markus Stäuble.


#1 by Alex on 21 Сентябрь 2009 - 15:03
Quote
Спасибо!
Отличное введение в Spring Web Flow.
Коротко и по сути.
#2 by Дмитрий Леонтьев on 21 Сентябрь 2009 - 15:24
Quote
Рад стараться!
#3 by Korotkov Nikolay on 14 Декабрь 2009 - 18:26
Quote
>>Spring Web Flow 2 поддерживает две технологии представлений: JSP и >>JSF Facelets.
Ты уверен что только их, а как же Velocity и Freemarker
#4 by Дмитрий Леонтьев on 15 Декабрь 2009 - 10:30
Quote
Здесь подразумевается, что эти две технологии (JSP и JSF) поддерживаются SWF “из коробки”. С JSP всё понятно, а для JSF в Web Flow написана специальная библиотека, которая отвечает за прозрачную интеграцию JSF и SWF. Об этом написано в разделе “Модульная стуктура SWF”.
Velocity и Freemarker – это шаблонизаторы. Web Flow не зависит ни от технологий представления, ни от технологий шаблонизации. Можно использовать любую технологию.
#5 by Роман on 21 Декабрь 2009 - 22:44
Quote
И все же, многое остается не ясным. Если не затруднит, распишите подробнее.
#6 by fedotxxl on 1 Декабрь 2010 - 13:19
Quote
А где продолжение?
#7 by Дмитрий Леонтьев on 5 Январь 2011 - 2:05
Quote
Продолжения, пока, к сожалению нет.
#8 by igor on 28 Март 2011 - 22:33
Quote
Спасибо! Отличный пост! Всё доступно и понятно. Благодарю. Ждём продолжений.