Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распределенные сервис-ориентированные системы..pdf
Скачиваний:
16
Добавлен:
05.02.2023
Размер:
9.2 Mб
Скачать

2.2 Шаблон проектирования MVC

Компонента JSF проектировалась по шаблону MVC.

На рисунке 2.12 компонента JSF в явном виде представлена как шаблон проектирования MVC, где сам FacesServlet выполняет роль контроллера. Если сравнить этот рисунок с рисунком 2.8 (см. стр. 67), представляющим трехзвенную архитектуру MVC, то мы увидим много общего. Более того, далее (в пункте 2.1.2) было показано, как тестовый пример можно представить в виде шаблона MVC.

Если смотреть еше раньше, то в пункте 1.3.4 главы 1 на рисунке 1.12 (стр. 32) представлена трехуровневая бизнес-парадигма предприятия. Ее также можно представить шаблоном MVC:

а) Контроллер — бизнес-руководители предприятия; б) Представление — уровень бизнес-логики; в) Модель — уровень интерфейсов сервисов.

Рисунок 2.12 — JSF в виде шаблона проектирования MVC [17]

Хотя наша дисциплина не является прямым курсом по проектированию информационных систем, каждый IT-специалист должен владеть шаблоном проектирования MVC, поскольку он дает важную декомпозицию для анализа и обоснования принимаемых решений.

Несмотря на явное подобие назначения контроллеров HttpServlet и FacesServlet, связанных с обработкой HTTP/XHTTP/AJAX-запросов, между ними имеются существенные различия:

68

а) HttpServlet предоставляет браузеру вызывать себя с помощью URI-адре- са, предоставляя программисту несколько методов (обычно doGet(...) и doPost(…)); программист сам решает, когда он обращается к модели, когда — к представлению, а когда формирует ответ браузеру;

б) FacesServlet управляется Web-контейнером и позволяет браузеру с помощью URI-адреса обратиться к некоторому XHTML-ресурсу, который посредством шаблонов Facelets (см. рисунок 2.11) вызывет скрытые от браузера XHTML-ресурсы (компоненты); каждая из Facelets-компонент может представлять статический XHTML-ресурс или быть связанной с одной или несколькими компонентами-подложками.

Учебная цель данного подраздела — более подробное раскрытие общей архитектуры технологии JSF, представленной рисунком 2.11, используя в качестве логической базы шаблон проектирования MVC (рисунок 2.12).

2.2.1 Контроллер FacesServlet и жизненный цикл запроса

Каждый запрос браузера обрабазывается отдельным процессом (потоком) виртуальной машины Java.

Рисунок 2.13 показывает структурную схему обработки запроса.

Рисунок 2.13 — Схема обработки запроса сервлетом [17]

При запуске сервера приложений запускается и приложение построенное на основе компоненты JSF. Соответственно, Web-контейнер создает объект типа javax.faces.webapp.FacesServlet, который для приема запросов от браузеров обслуживается собственным листенером.

69

Отдельный запрос браузера, например, запрос о событии нажатия кнопки, как показано на рисунке 2.13, воспринимается объектом, показанным как FacesServlet, который создает два новых объекта:

1.Объект типа javax.faces.context.FacesContext для представления контекстной информации, связанной с обработкой входящего запроса и пос ледующего создания соответствующего ответа.

2.Объект типа javax.faces.lifecycle.Lifecycle для обработки запроса в последовательности шести этапов, показанных на рисунке 2.14.

Рисунок 2.14 — Жизненный цикл обработки обработки запроса [17]

В процессе этапов жизненного цикла предусмотнены четыре точки обработки событий, способных досрочно завершить обработку запроса, если отсутствует необходимость в работе последующих этапов. В случае обнаружения ошибки, в каждой точке обработки событий предусмотрено аварийное завершение запроса.

Особое внимание следует уделить этапам «Обновление состояния модели» и «Вызов приложения».

Обновление состояния модели — этап, связывающий все проверенные значения компонентов с соответствующими компонентами-подложками.

Вызов приложения — этап, чтобы выполнить бизнес-логику. Здесь любое выбранное действие будет выполнено компонентом-подложкой, а также вступает в действие навигация (переход на другие страницы web-приложения).

70

2.2.2 Контекст состояния запроса FacesContext

Объект типа javax.faces.context.FacesContext создается сервлетом для представления контекстной информации, связанной с обработкой входящих запросов и создания соответствующего ответа.

Напомню, что общая парадигма программной платформы Java EE — максимальная передача всех служебных или рутинных операций контейнеру сервера приложений, в данном случае и компоненту JSF. Тем не менее, если это необходимо, то программист может воспользоваться информацией, сохраняемой объектом контекста в течении всего жизненного цикла обработки запроса.

Объект контекста создается для каждого запроса браузера. Обычно программист обрабатывает контекст запроса в компоненте-подложки с помощью создания объекта в виде:

FacesContext context = FacesContext.getCurrentInstance();

К созданному объекту context можно применить методы, приведенные в таблице 2.1.

Таблица 2.1 — Методы объекта типа FacesContext [17]

Метод

Описание метода

addMessage

Присоединяет сообщение: информационное, предупреждающее,

 

сообщение об ошибке, либо сообщение о фатальной ошибке.

getApplication

Возвращает объект типа Application, связанный с этим web-

 

приложением.

getAttributes

Возвращает объект типа Map, представляющий атрибуты,

 

связанные с объектом типа FacesContext.

getCurrentInstance

Возвращает объект типа FacesContext для запроса, который

 

обрабатывается в текущем потоке.

getELContext

Возвращает объект типа ELContext для текущего объекта типа

 

FacesContext.

getMaximumSeverity

Возвращает максимальную степень тяжести, записанную в

 

любом FacesMessage, внесенном в очередь.

getMessages

Возвращает коллекцию объектов типа FacesMessage.

getPartialViewContext

Возвращает объект типа PartialViewContext для заданного

 

запроса. Он используется для внедрения логики в цикл

 

управления обработкой/отрисовкой, например, для обработки

 

запроса AJAX.

getViewRoot

Возвращает корневой компонент, связанный с запросом.

71