Архитектура Stuts2

Struts2 - это каркас для разработки WEB-приложений, который создан и используется вместе с популярной J2EE (Java 2, Enterprise Edition) платформой. Он укорачивает время разработки и делает разработчиков более продуктивными, обеспечивая их набором инструментов и компонент для создания приложений. Каркас определяется в словаре, как "структура для поддержки и окружения чего-либо другого ...". Это определение исключительно точно описывает Struts2 - совокупность Java-кода в виде набора библиотек, спроектированных для того, чтобы помочь создавать надежные приложения с экономией времени.

Основа Struts2 - MVC

Struts2 опирается на шаблон проектирования Model-View-Controller (MVC). Шаблон MVC широко признан, как один из самых хорошо разработанных и зрелых шаблонов проектирования, которые используются в настоящее время. При использовании шаблона MVC, обработка разбивается на три различные части, а именно на контроллер (Controller), модель (Model) и компоненты представления(View). Структура Struts2 представлена на рисунке.

FilterDispatcher

Все запросы Struts2 изначально должны попасть на обработку в фильтр FilterDispatcher, который определяет принадлежность запроса (HttpRequest) пользователя к приложению и выбирает соответствующее ему действие. Если FilterDispatcher обнаруживает, что необходимо предварительно выполнить определенные "операции" перехватчиками (Interceptors), то управление передается данным Interceptor'ам, и по их результатам либо вызывается соответствующее действие, либо вызывается форма обработки ошибок (выбрасывается исключение).

FilterDispatcher подключается в файле дескриптора приложения web.xml.

Перехватчики в Stuts2

Перехватчики - это новинка в Struts2. Они могут выполнять огромный объем работы: разбор параметров запроса, загрузку исходных данных, обработку исключений, проверку корректности данных. Они являются для действий в Stuts2 тем же, чем фильтры для сервлетов.

Перехватчики представляют собой Java-классы, наследующие (implements) свойства класса Interceptor. Подключаются перехватчики к WEB-приложению на уровне файла конфигурации struts.xml

Компоненты модели (Model)

Компоненты моделей предоставляют "модель" для бизнес-логики или данные для Struts2 программы. Например, в Struts2 приложении, которое управляет данными клиентов, возможно было бы выгодно создать компонент модели "Customer", который бы предоставлял программе доступ к информации о клиентах.

Очень часто компоненты моделей обеспечивают интерфейс к базам данных или back-end системам. Например, если Struts2 приложению нужен доступ к данным сотрудников хранящимся в enterprise системе отдела кадров, то необходимо спроектировать модель "Employee" так, чтобы она выполняла бы роль интерфейса между Struts2 приложением и системой отдела кадров.

Компоненты моделей, как правило, являются стандартными Java-классами. Для моделей не требуется специального формата, поэтому можно использовать код, написанный для других проектов.

Компоненты представления (View)

Компоненты представления - это те части приложения, которые отвечают за презентацию информации и ее прием от пользователя. В Struts2 компоненты представления соответствуют WEB-страницам. Компоненты представления используются для представления информации, хранящейся в моделях. Например, модель "Customer", которую мы обсуждали выше, нуждается в компоненте представления, которая бы отображала данные этой модели. Обычно для каждой Веб-страницы в Struts2 приложении имеется не менее одного компонента представления.

Компоненты представления создаются при помощи JavaServer Pages (JSP). Struts2 предлагает разработчику большое количество "JSP Custom Tags" (иногда называемых Struts Tags), которые расширяют обычные возможности JSP и упрощают разработку компонентов представления.

Struts2 поддерживает различные варианты View компонентов. Это могут быть не только JSP-страницы, но и Velocity или Freemarker шаблоны. Так же Stuts2 поддерживает библиотеки построения шаблонов форм Tiles.

Компоненты контроля (Controller)

Компоненты контроля координируют деятельность WEB-приложения. Под контролем подразумевается прием данных от пользователя и обновление базы данных с помощью компонента модели, или обнаружение ошибки back-end системой и ее обработка. Контроллер принимает данные от пользователей, принимает решение о том, какие компоненты моделей должны быть обновлены, выбирает компоненты представления, которым посылается сообщение, сигнализурующее о необходимости демонстрации обновленных результатов.

Одно из главных преимуществ компонент контроля состоит том, что они позволяют разработчику перенести код, занимающийся обработкой ошибок, из JSP-страниц в само приложение. Если ошибка была и она обработана, компонент контроля обращается к специальному компоненту представления, ответственному за показ ошибок, а не к компоненту представления, отображающему "нормaльные" данные. Это значительно упрощает логику в страницах, и облегчает их разработку и обслуживание.

Компоненты контроля в Struts2 являются Java-классами, и должны быть созданы по определенным правилам, т.е. наследовать свойства родительского класса и следовать правилам фреймворка. В контексте Struts их обычно называют "Action classes." Действия - это основной элемент построения приложения с использованием Struts2. В них может храниться логика приложения, вызов сервисов, обращение к БД и т.д. В результате выполнения действия возвращается строковый код результата, который определяет дальнейшее выполнение запроса пользователя.