В этой статье я кратко расскажу о Spring Web Flow 2. Если вы не знакомы со Spring Framework и Spring MVC, то вам лучше начать с чего-то более простого, например:

Поехали!

Spring Web Flow – это open-source фреймворк для разработки web-приложений. SWF является частью портфолио продуктов Spring (Spring product portfolio).

“Это очередной фреймворк для разработки web-приложений, коих уже сотни”, – скажете вы и будете правы. SWF – это еще один MVC-фреймворк, но выделяется он среди других тем, что позволяет настроить порядок вызова страниц в web-приложении.

Web Flow является надстройкой над Spring MVC. На следующем рисунке изображен стек технологий, на которых основан SWF.

Стек технологий Spring

Стек технологий 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)

Структура потока (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.