2.2 Struts
В паттерне MVC поток выполнения приложения всегда проходит через центральный контроллер. Контроллер перенаправляет запросы - в нашем случае, это HTTP запросы - к соответствующему обработчику. Обработчики привязаны к Модели, и каждый разработчик действует как адаптер между запросом и Моделью. Модель представляет, или инкапсулирует, бизнес-логику или состояние приложения. Управление обычно передается обратно через Контроллер соответствующему Представлению (View). Перенаправление осуществляется путем обращения к набору соответствий (mappings) между Моделью и представлением; причем этот набор обычно загружается из базы данных или из конфигурационного файла. Такая схема обеспечивает слабое связывание между Представлением и Моделью, что может сделать разработку и сопровождение приложения значительно проще.
Согласно паттерну Model-View-Controller, Struts имеет 3 основных компонента: сервлет контроллер, который входит в Struts, JSP страницы (это "представление”) и бизнес-логику приложения ("модель”). Давайте рассмотрим, как это все взаимодействует.
Strutsовский сервлет-контроллер связывает и перенаправляет HTTP запросы к другим объектам среды, включая JavaServer Pages и наследники класса org. apache. struts. action. Action, которые поставляются разработчиком приложения. Во время инициализации контроллер разбирает (parses) конфигурационный файл struts-config. xml. Конфигурационный файл определяет (помимо других вещей) соответствия org. apache. struts. action. ActionMappings для данного приложения. Контроллер использует эти соответствия для превращения HTTP-запросов в действия приложения.
Обычно ActionMapping определяет:
· путь запроса (или "URI”)
· тип объекта (наследника класса Action) для обработки запроса
и другие необходимые свойства
Объект Action может обработать запрос и ответить клиенту (обычно Web-браузеру), или указать, что управление должно быть передано куда-то дальше. Например, если проверка имени и пароля пользователя прошла успешно, Action для обработки этого события может пожелать перенаправить запрос на главное меню.
Объекты Action имеют доступ сервлету-контроллеру приложения, и таким образом имеют доступ к методам сервлета. Во время перенаправления запроса, объект Action может неявно перенаправить один или более совместно используемых (shared) объектов, включая JavaBeans, помещая их в одну из стандартных коллекций, которые совместно используются Java-сервлетами.
Объект Action может создать Bean, представляющий корзину покупателя, поместить этот bean в коллекцию сессии, и затем передать управление на другой mapping. Mappingу может быть сопоставлен (mapping может использовать) JavaServer Page, отображающей содержимое корзины. Так как каждый клиент имеет собственную сессию, каждый из них будет иметь свою собственную корзину. В приложении Struts большинство элементов бизнес-логики может быть представлено с использованием JavaBeans. Объект Action может обращаться к свойствам JavaBean без углубления в детали реализации. Это инкапсулирует бизнес логику и таким образом Action может сфокусироваться на обработке ошибок и перенаправлении потока управления.
JavaBeans так же могут быть использованы для управления html-формами ввода (input forms). Ключевой проблемой при проектировании web-приложений является хранение и проверка того, что ввел пользователь, в промежутках между запросами. Используя Struts, вы можете определить свой собственный набор классов form bean, унаследовав их от org. apache. struts. action. ActionForm, и легко сохранять данные для форм ввода в этих form bean. Эти beans сохраняются в одной из стандартных совместно используемых сервлетами коллекций, и могут быть использованы другими объектами, особенно объектами Action.
Form bean могут быть использованы в JSP для сбора данных, вводимых пользователем; объектами Action для проверки введенных пользователями данных; и опять в JSP для заполнения полей html-форм. В случае обработки ошибок, Struts имеет совместно используемый механизм для возбуждения и отображения сообщений об ошибках.
Struts form bean объявляются в конфигурационном файле, определяются в исходных Java-кодах, и привязываются к ActionMapping, используя общее имя свойства. Когда запрос вызывает Action, которое использует form bean, сервлет-контроллер либо извлекает, либо создает вновь form bean, и передает его объекту Action. Объект Action может затем проверить содержимое form bean перед тем, как форма ввода для данного form bean будет показана, а также поставить в очередь те сообщения, которые будут обработаны формой. Когда дело сделано, объект Action может вернуть управление, перенаправив его на форму ввода, обычно JSP. После этого контроллер может ответить на HTTP-запрос и направить клиента на JavaServer Page.
Среда Struts включает библиотеки специальных тэгов, которые могут автоматически поместить значения свойств form bean в поля html-форм. Единственная вещь, которую большинство JSP должны знать об остальной части среды это соответствующие имена полей и где надо сделать submit. Компоненты вроде сообщений, которые ставятся в очередь объектами Action могут быть отображены с помощью одного лишь тэга. Могут определяться другие тэги, зависящие от конкретного приложения, для того, чтобы скрыть детали реализации от JSP.
Специальные тэги среды Struts спроектированы для использования свойств интернационализации, которые встроены в платформу Java. Все метки, поля и сообщения могут извлекаться из ресурса сообщений (message resource), и Java может автоматически использовать правильный ресурс в зависимости от страны и языка клиента. Чтобы обеспечить сообщения на дополнительном языке, просто добавьте еще один файл ресурсов.
Помимо интернационализации, другими преимуществами такого подхода являются единое именование меток на различных формах, а также возможность просматривать и изменять все метки и сообщения в централизованном виде.
Для простейших приложений, объект Action иногда может обрабатывать бизнес-логику, связанную с запросом. Однако в большинстве случаев объект Action должен вызывать другой объект, обычно JavaBean, для выполнения операций реальной бизнес-логики. Это позволяет объектам Action сфокусироваться на обработке ошибок и управлении приложением, а не реализацией бизнес-логики. Чтобы быть легко переносимыми на другие платформы, JavaBean не должны ссылаться ни на какие объекты web-приложений. Объект Action должен извлекать/переводить необходимые детали из HTTP-запросов и передавать их объектам классов бизнес-логики в виде обычных Java-переменных.
В приложениях баз данных, например:
Bean бизнес-логики соединяется с базой данных и посылает запросы.
Bean бизнес-логики возвратит результат объекту Action
Объект Action сохранит результат в form bean в запросе (т.е. поместит form bean в context collection - прим. перев.)
JavaServer Page отобразит результат в виде HTML-формы
Никогда ни Action, ни JSP не нужно беспокоиться (или заботиться) о том, откуда пришел результат. Они должны знать как упаковать и показать его.
Несколько лет назад разработчики приложений могли рассчитывать на распространение своих приложений только среди жителей собственной страны, которые используют один (иногда два) языка и единственный способ представления таких вещей, как даты, числовые и денежные значения. Однако взрывной рост разработки приложений с использованием web-технологий, также как и распространение этих приложений через Интернет, частично сделал национальные границы невидимыми. Это привело к необходимости разрабатывать приложения с поддержкой интернационализации (i18n) и локализации (localization).
Struts строится на основе платформы Java, чтобы обеспечить возможности построения интернационализованных и локализованных приложений. Ниже приведены ключевые концепции, с которыми нужно познакомиться:
Locale - основной Java класс, который поддерживает интернационализацию - java. util. Locale. Каждая Locale представляет собой конкретный выбор страны и языка (плюс возможный вариант языка), а также набор способов форматирования таких вещей как числа и даты.
ResourceBundle - Класс java. util. ResourceBundle обеспечивает основные инструменты для поддержки сообщений на многих языках. Подробнее смотрите Javadocs - класс ResourceBundle, а также информацию об интернационализации в документации к вашему релизу JDK.
PropertyResourceBundle - Одна из стандартных реализаций ResourceBundle позволяет вам определять ресурсы, используя тот же синтаксис "имя=значение” ("name=value"), что используется при инициализации файлов свойств. Это очень удобно для подготовки пакетов ресурсов (resource bundles) с сообщениями, которые используются в web-приложении, потому что обычно такие сообщения представлены в виде текста.
MessageFormat - Класс java. text. MessageFormat позволяет заменять части строки сообщения (в этом случае они извлекаются из пакета ресурсов) аргументами, определяемыми во время выполнения. Это полезно в случае, когда вы создаете предложение, но слова в нем будут появляться в различном порядке на различных языках. Строка-заменитель {0} в сообщении заменяется первым аргументом, {1} заменяется вторым аргументом и так далее.
MessageResources - Класс Struts org. apache. struts. util. MessageResources позволяет обращаться с пакетами ресурсов как с базой данных, и позволяет запрашивать конкретную строку сообщения для конкретной Locale (обычно Locale для текущего пользователя) вместо Locale, используемой по умолчанию на сервере, где запущено данное приложение.
Обратите внимание, что поддержка i18n в средах вроде Struts ограничена представлением интернационализованного текста и изображений для пользователя. Поддержка для Locale соответствующих методов ввода (используемых в таких языках как японский, китайский и корейский) возлагается на клиентское устройство - обычно web-браузер.
Чтобы получить интернационализованное приложение, следуйте рекомендациям, описанным в документе по интернационализации в документации JDK на вашей платформе, для того чтобы создать файл свойств (properties file), содержащий сообщения для каждого языка. Пример рассмотрен чуть ниже
В обычном Java EE веб-приложении клиент, как правило, отправляет информацию на сервер из формы. Введённые данные передаются сервлету, который обрабатывает её, при необходимости взаимодействуя с базой данных, и формирует HTMLответ. Для больших проектов (например, для портала с сотнями страниц), такой подход является неадекватным, так как объединяет бизнес логику и логику отображения, что делает поддержку чрезвычайно сложной.
Struts был создан для того, чтобы чётко разделить модель (бизнес-логику), представление (JSP-страницы) и контроллер (отвечающий за передачу данных от модели к представлению и обратно). Struts предоставляет стандартный контроллер - сервлет под именем ActionServlet и различные средства для создания страниц представления. Разработчик веб-приложения отвечает за написание кода модели и создание конфигурационного файла struts-config. xml, который связывает воедино модель, представление и контроллер.
Запросы от клиента передаются контроллеру в виде "Actions" (действий), определённых в конфигурационном файле. Когда контроллер получает такой запрос, он передаёт его соответствующему Action классу. Последний взаимодействует с кодом Модели и возвращает контроллеру "ActionForward", строку, определяющую страницу для отправления клиенту. Информация передаётся между моделью и представлением в виде особых JavaBeans. Богатая библиотека тегов позволяет получать данные из бинов и записывать их без Java кода.
Struts также поддерживает i18n (интернационализацию), облегчает валидацию данных полученных из веб-формы и предоставляет механизм создания шаблонов под названием "Tiles", который кроме всего прочего позволяет наследовать веб-страницы.
- Введение
- 1. Структура и задачи предприятия
- 1.1 Разработка систем с использованием WEB-технологий
- 2. Краткое теоретическиое обоснование применяемых для решения поставленной задачи технологий
- 2.1 WEB-технологии. Spring framework
- 2.1.1 Архитектура Spring
- 2.1.2 IoC - инверсия контроля
- 2.2 Struts
- 2.3 Hibernate
- 3. Практическая реализация поставленной задачи
- Заключение
- Разработка web-приложений и asp.Net
- Тема 5.7. Введение в разработку Web-приложений
- Web-приложения
- Архитектура Web-приложений
- 42. Современные технологии разработки web-приложений. Принципы использования субд в web-приложениях.
- 1.12. Разработка web-приложений
- 3.8.4 Разработка Web-приложения или сайта.