sdt-book-2006 (1133574), страница 73
Текст из файла (страница 73)
Поэтому гораздо тяжелее вносить в них изменения,связанные с изменением требований к соответствующим объектам предметной области.• Отсутствие удобной поддержки для отображения иерархии наследования классов вструктуру базы данных приложения.Данные класса-предка и класса-наследника могут храниться в одной таблице, в разных инесвязанных таблицах, или общая часть данных может храниться в одной таблице, а270специфические данные класс-наследника — в другой.
Однако для обеспечения правильнойсинхронизации данных в каждом из этих случаев достаточно много кода надо написатьвручную. Поскольку во многих приложениях объектные модели данных содержат классы,связанные отношением наследования, отсутствие вспомогательных механизмов,автоматически обеспечивающих отображение таких классов на структуру базы данных,приносит много неудобств.• Невозможность использовать в рамках приложения компоненты EJB, соответствующиеданным в базе данных, и временные объекты того же типа, для которых не нужно иметьсоответствующих записей в таблицах баз данных.Часто такая возможность оказывается удобной при программировании различных методовобработки данных внутри приложений.• Громоздкость разработки сервлетов для обработки простых (тем более, сложных) запросовпользователя.При этом необходимо полностью проанализировать запрос, часто — найти в содержащемсяв нем документе HTML поля формы, заполненной пользователем, и указанную имоперацию их обработки.
Только после этого можно переходить к собственно выполнениюэтого запроса, что, казалось бы, является основной функцией сервлета. Таким образом,большое количество усилий тратится только на то, чтобы выделить из запроса операцию,которую пользователь хочет произвести, а также ее аргументы.• Неудобство использования в рамках JSP-страниц специализированных элементовпользовательского интерфейса. Для сравнения: в рамках ASP.NET можно использоватьбиблиотечные и пользовательские элементы управления, которые помещаются на страницупри помощи специального тега, а в параметрах этого тега указываются, в частности,методы для обработки событий, связанных с действиями пользователя.Для решения этих проблем используются различные библиотеки, инструменты икомпонентные среды, созданные в сообществе Java-разработчиков. Некоторые такие библиотеки итехники станут стандартными средствами в рамках платформы J2EE новой версии 5.0 [1].Jakarta StrutsСреда Jakarta Struts [2,3] создавалась затем, чтобы упростить разработку компонентов Webприложения, предназначенных для обработки запросов пользователей, и сделать эту обработкуболее гибкой.Основные решаемые такими компонентами задачи можно сформулировать следующимобразом:• выделить сам логический запрос и его параметры из HTML документа, содержащегося вHTTP-запросе;• проверить корректность параметров запроса и сообщить пользователю об обнаруженнойнекорректности наиболее информативным образом;• преобразовать корректный логический запрос и его параметры в вызовы соответствующихопераций над объектами предметной области;• передать результаты сделанных вызовов компонентам, ответственным за построение ихпредставления для пользователя.Как и в рамках базовой платформы J2EE, в Struts основным архитектурным стилем для Webприложений является образец «данные-представление-обработка».
При этом роль представленияиграют JSP-страницы, а роль обработчиков — сервлеты. Основные отличия Struts от стандартнойтехники J2EE связаны с большей специализацией сервлетов и некоторой стандартизацией обменаданными между сервлетом, обрабатывающим запросы пользователя, и JSP-страницей,представляющей их результаты.271Клиент —Web-браузерHTMLстраницыWeb-серверHTTPWeb-контейнерActionServlet иRequestProcessorДействияДействиеДействияФормадействияДействияJSPКомпонентымоделиданныхХранилищеданных(СУБД)База данныхРисунок 79. Общая схема архитектуры Web-приложений на основе Struts.В рамках приложения на основе Struts используется ровно один стандартизированный сервлет(ActionServlet), анализирующий запросы пользователя и выделяющий из каждого запросадействие (action), которое пользователь пытается выполнить. Для Интернет-магазина такимдействиями, например, могут быть аутентификация (предоставление своего имени и пароля),получение данных о товаре, поиск товара, добавление товара к уже заказанным, изменение заказа,предоставление прав на скидку, выполнение заказа, получение статуса выполнения заказа, отменазаказа и пр.
Для каждого действия создается отдельный класс действия. Такой класс должен бытьнаследником класса org.apache.struts.action.Action из библиотеки Struts и перегружать методActionForward execute(ActionMapping, ActionForm, HttpServletRequest,HttpServletResponse) — именно он и вызывается для выполнения этого действия.Один из параметров метода execute() в классе действия имеет тип формы действияorg.apache.struts.action.ActionForm. Для каждого действия определяется свой класс формыдействия, наследующий классу ActionForm. Объекты этого класса используются для передачипараметров действия — наиболее существенных данных запросов, описывающих данноедействие.В методе execute() класса действия обычно строятся или находятся компоненты бизнеслогики приложения, которые реализуют операции, соответствующие данному действию, а затемэти операции выполняются со значениями полей объекта формы действия в качестве аргументов.Привязка запросов к действиям описывается в дополнительном конфигурационном файлеstruts-config.xml в формате XML, в теге action-mappings.
Одно действие описывается с помощьювложенного тега action, который имеет следующие атрибуты.•pathОпределяет шаблон URI, обращения к которым будут интерпретироваться как выполнениеданного действия.•typeОпределяет имя класса данного действия.•nameЗадает уникальное имя для данного действия.Привязка действий к определенным для них формам происходит с помощью тегов from-bean,вложенных в тег form-beans. Каждый тег form-bean имеет атрибут name, указывающий имя272действия для данной формы, и type, указывающий имя класса формы действия. Кроме того, такойтег может содержать вложенные теги form-property, описывающие свойства формы (в смыслеJavaBeans) при помощи таких же атрибутов name (имя свойства) и type (тип свойства).Помимо описанного механизма декомпозиции обработки запросов, среда Struts включаетбиблиотеки классов Java, в том числе, классов часто встречающихся действий, и библиотекипользовательских тегов, предназначенных для более удобного описания размещенных на JSPстраницах элементов HTML-форм.Java Server FacesJava Server Faces (JSF) [4,5] включают библиотеку элементов управления WebUI javax.faces идве библиотеки пользовательских тегов, предназначенных для использования этих элементовуправления в рамках серверных страниц Java.
C помощью тегов библиотеки jsf/html элементыуправления размещаются на странице, а с помощью тегов из jsf/core описывается обработкасобытий, связанных с этими элементами, и проверка корректности действий пользователя.В аспекте построения WebUI на основе серверных страниц Java технология Java Server Facesявляется развитием подхода Struts (Struts включают решения и для других аспектов разработкиприложений), предлагая более богатые библиотеки элементов WebUI и более гибкую модельуправления ими. Эта модель включает следующие элементы.• Возможность различного изображения абстрактного элемента управления (например,элемент управления «выбор одного из многих» может быть изображен как группа радиокнопок, комбо-бокс или список).• Возможность изменения визуальных стилей элементов управления.• Возможность привязки изображаемых элементом управления значений к свойствамкомпонентов модели данных.• Возможность привязки элементов управления к методам проверки корректности значений,устанавливаемых в них пользователем.В дополнение к библиотекам элементов WebUI JSF предлагает определять правила навигациимежду страницами в конфигурационном файле приложения.
Каждое правило относится кнекоторому множеству страниц и при выполнении определенного действия или наступлениисобытия предписывает переходить на некоторую страницу. Действия и события связываются сдействиями пользователя или логическими результатами их обработки (такими результатамимогут быть, например, успешная регистрация заказа в системе, попытка входа пользователя всистему с неправильным паролем и пр.).Технология Java Server Face версии 1.2 войдет в состав будущей версии 5.0 платформыJ2EE [6].Управление данными приложения. HibernateТехнологии обеспечения синхронизации внутренних данных приложения и его базы данныхразвиваются в настоящий момент достаточно активно. Технология EJB предоставляетсоответствующие механизмы, но за счет значительного снижения удобства разработки имодификации компонентов.