Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / КСТ / Разработка веб-приложений.pdf
Скачиваний:
160
Добавлен:
23.02.2015
Размер:
2.74 Mб
Скачать

Чтобы установить отображение ошибок в NetBeans IDE, нужно сделать следующее:

1)открыть проект;

2)распахнуть узел проекта в окне Projects;

3)распахнуть узел Web Pages и WEB-INF;

4)дважды щелкнуть по web.xml;

5)кликнуть Pages в редакторе;

6)распахнуть узел Error Pages;

7)кликнуть Add;

8)в диалоге Add Error Page:

кликнуть Browse для размещения страницы обработки ошибок;

ввести код статуса HTTP для выбора открываемой страницы в поле Error

Code;

ввести исключение для вызова страницы в поле Exception Type;

кликнуть OK.

2.6. Задание ссылок на ресурсы

Если веб-компонент использует объекты как, например, бины, источники данных или сервисы веб, вы применяете аннотации Java EE, чтобы включить эти ресурсы в ваше приложение. Аннотации заменяют типичный код и элементы конфигурации, которых требовали предшествующие версии Java EE. Хотя инъекция ресурсов с использованием аннотаций может быть более удобной формой для разработчика, есть

некоторые ограничения на их использование в веб-приложениях. Вы можете внедрить

ресурсы только в управляемые контейнером объекты. Дело в том, что контейнер должен проконтролировать создание компонента, чтобы он смог выполнить внедрение («инъекцию») в компонент. Поэтому вы не можете внедрить ресурсы в объекты как, например, простые компоненты JavaBeans. Тем не менее, JavaServer Faces управ-

ляет бинами через управление контейнера; следовательно, они могут воспринимать

инъекции ресурса.

Компоненты, которые могут принять инъекции ресурса, указаны в табл. 2.2.

Таблица 2.2

Компоненты для работы с внедрением ресурсов

Компонент

Интерфейс/Класс

Servlets

javax.servlet.Servlet

Servlet Filters

javax.servlet.ServletFilter

 

javax.servlet.ServletContextListener

 

javax.servlet.ServletContextAttributeListener

 

javax.servlet.ServletRequestListener

Event Listeners

javax.servlet.ServletRequestAttributeListener

 

javax.servlet.http.HttpSessionListener

 

javax.servlet.http.HttpSessionAttributeListener

 

javax.servlet.http.HttpSessionBindingListener

Taglib Listeners

Подобные вышеприведённым

Taglib TagHandlers

javax.servlet.jsp.tagext.JspTag

Managed Beans

Plain Old Java Objects (POJO)

38

2.6.1. Объявление ссылок на ресурсы

Аннотация @Resource используется, чтобы объявить ссылку на ресурс, как на-

пример, источник данных, бин или переменная среды.

Аннотация @Resource может использоваться в классе, методе или поле.

Контейнер, ответственный за инъекции ресурсов, объявленные в аннотации @Resource, отображает её в соответствующие ресурсы JNDI. В следующем примере

аннотация @Resource используется, чтобы внедрить источник данных в компонент

при использовании технологии JDBC для доступа к реляционной базе данных:

@Resource javax.sql.DataSource catalogDS; public getProductsByCategory() {

// get a connection and execute the query Connection conn = catalogDS.getConnection();

..

}

Контейнер внедряет этот источник данных для компонента прежде, чем он станет доступным для приложения. Источник данных отображается JNDI на основе име-

ни области catalogDS и типа источника javax.sql.DataSource.

Если есть несколько ресурсов, которые нужно внедрить в один компонент, вам нужно использовать аннотацию, как показано в следующем примере:

@Resources ({

@Resource (name="myDB" type=java.sql.DataSource), @Resource(name="myMQ" type=javax.jms.ConnectionFactory)

})

Приведённые примеры веб-приложений используют Java Persistence API,

чтобы иметь доступ к реляционным базам данных. Этот API не требует от вас явно создавать связи в источником данных. Следовательно, примеры не используют аннотации @Resource, чтобы внедрять источник данных. Этот API поддерживает аннотации @PersistenceUnit и @PersistenceContext, чтобы внедрять экземпляры

EntityManagerFactory и EntityManager соответственно в фасадах сущностей.

2.6.2. Объявление ссылки на веб-сервисы

Аннотация @WebServiceRef обеспечивает ссылки на сервисы веб. Следующий пример показывает использование аннотации @WebServiceRef, чтобы объявить ссыл-

ку на сервис веб. WebServiceRef использует атрибут wsdlLocation, чтобы определять

URI файла WSDL развертывания сервисов:

....

import javax.xml.ws.WebServiceRef;

...

public class ResponseServlet extends HTTPServlet { @WebServiceRef(wsdlLocation=

"http://localhost:8080/helloservice/hello?wsdl") static HelloService service;

39

3. Технология

JavaServer Faces TM (JSF)

Технология JavaServer Faces является интерфейсом серверной части компо-

нентной среды для веб-приложения Java.

Основные компоненты технологии JavaServer Faces следующие:

yyAPI для представления UI-компонентов и управления их состоянием, обра-

ботки событий, выполнения проверок и преобразования данных на стороне сервера, поддержки страничной навигации, интернационализации и доступа;

обеспечение расширяемости для всех этих средств.

yyБиблиотеки тегов для добавления компонентов на страницы и для связывания компонентов с объектами на сервере.

Хорошо определённые модели программирования и библиотеки тегов значи-

тельно упрощают проблемы построения интерфейсов пользователя веб-приложений

на стороне сервера. С минимальными усилиями вы можете: yyсоздавать страницы;

yyперемещать компоненты на страницу добавлением тегов компонент; yyсвязывать компоненты на странице с серверными данными; yyсоздавать компонентные события в коде приложения на сервере;

yyсохранять и восстанавливать состояние приложения на протяжении жизни запроса;

yyсоздавать многократно используемые и расширяемые компоненты.

Основным преимуществом JSF является полное разделение функциональности и представления приложения.

В общем случае JSF-приложение включает следующие части: yyнабор страниц, в которых расположены компоненты; yyнабор тегов для добавления компонент на страницы;

yyнабор внешних объектов JavaBeans, имеющих свойства и методы для компонент на странице;

yyдескриптор развёртывания (web.xml);

yyдополнительные файлы конфигурирования ресурсов приложения, задающие правила навигации и настройки бин-объектов и других пользовательских компонентов;

yyдругие объекты, созданные разработчиком и включающие проверки, преобразователи или обработчики;

yyнабор пользовательских тегов для представления объектов на странице.

На рис. 3.1 приведён типичный регламент взаимодействия клиента и сервера

для типичного приложения JSF. В ответе на запрос клиента контейнером, реализую-

щим JSF-технологию, генерируется страница. Страница myfacelet.xhtml построена с

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

yyслушатели событий, конвертеры, зарегистрированные для компонентов;

yyкомпоненты JavaBeans для работы с данными и реализации бизнес-

процессов.

40

Рис. 3.1. Взаимодействие клиента и сервера

Самым большим достоинством JSF-технологии является разделение между бизнес-логикой и представлением приложения на экране дисплея. Приложение направляет запрос связанному с событием обработчику и управляет хранимыми объектами на стороне сервера. Это позволяет приблизить поведение веб-приложения к традиционным приложениям «клиент-сервер» с графическим интерфейсом пользователя. Технология позволяет разрабатывать бизнес-логику и дизайн приложения с минимальными взаимодействиями между разработчиками.

Разработка JSF-приложения

Последовательность разработки JSF-приложения включает следующие шаги: yyразработка внешних бинов;

yyдобавление деклараций управления бинами; yyсоздание страниц с использованием тегов компонент; yyзадание соответствия экземпляров FacesServlet .

1. Разработка внешних бинов

Внешний бин является объектом JavaBean, управляемым JavaServer Faces. Компоненты на странице связаны с внешними бинами, которые обеспечивают прикладную логику. Например, внешний бин, helloWorld.java, содержит следующий код:

package Hello;

import javax.faces.bean.ManagedBean; @ManagedBean

public class Hello {

final String world = "Hello World!"; public String getWorld()

{ return world; }

}

Пример бина устанавливает переменную world в "Hello World!" и позволяет запрашивать свойство word со страниц приложения. Аннотация @ManagedBean регистрирует внешний бин как ресурс на сервере JavaServer Faces.

41

2.Создание веб-страницы

Втипичном приложении Facelets веб-страницы создаются в формате XHTML.

Страница beanhello.xhtml — простая страница XHTML. Она содержит следующее:

<html xmlns="http://www.w3.org/1999/xhtml"> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<title>JavaServer Faces Hello World Application</title> </head>

<body>

#{hello.world}

</body>

</html>

Страница подключается ко внешнему бину через унифицированный язык вы-

ражения (Unified Expression Language — EL) выражением #{hello.world}, которое из-

влекает значение свойства world из внешнего бина hello. Отметьте использование

имени hello для ссылки на экземпляр внешнего класса Hello. Если в аннотации

@ManagedBean не определено имя, внешний бин будет доступен с первым символом в имени класса в НИЖНЕМ регистре (запомните это правило).

3. Отображение экземпляра Faces Servlet

Необходимо выполнить отображение Faces Servlet в дескрипторе развертывания (web.xml). Типичное отображение Faces Servlet выглядит следующим образом:

<servlet>

<servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup>

</servlet> <servlet-mapping>

<servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern>

</servlet-mapping>

Вышеуказанный сегмент файла представляет часть типичного дескриптора раз-

вертывания JavaServer Faces.

Дескриптор развёртывания веб может также содержать и другие сведения,

важные для конфигурации приложения JavaServer Faces, но эта информация здесь

не показана. Отображение выполняется автоматически при использовании сервера

Java EE 6, как, например, Sun GlassFish Enterprise Server v3.

4. Жизненный цикл приложения

Каждое веб-приложение имеет жизненный цикл (lifecycle). Общие задачи обра-

ботки поступающих запросов, декодирования параметров, модификации и сохранения состояния, формирование веб-страницы для просмотра выполняются полностью

в течение жизненного цикла веб-приложения. Некоторые среды веб-приложений прячут от вас детали жизненного цикла, тогда как другие требуют, чтобы вы управляли ими вручную.

42

По умолчанию, JavaServer Faces обрабатывает большинство операций жизнен-

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

чинающего программиста нет необходимости понимать жизненный цикл приложения

JavaServer Faces, но эта информация может быть полезной для создания более слож-

ных приложений.

Жизненный цикл JavaServer Faces приложения начинается и заканчивается следующей последовательностью действий: клиент делает запрос на веб-страницу и

сервер отвечает страницей. Цикл состоит из двух основных фаз: выполнение и фор-

мирование образа страницы.

В течение фазы выполнения могут произойти следующие действия: вид страни-

цы приложения может быть создан или восстановлен из предыдущего образа, могут быть применены значения параметров запроса, выполнены преобразования и про-

верки для возвращаемых значений компонентов, скорректированы свойства внешних

бинов значениями, поступившими от компонентов формы, и вызвана бизнеслогика

приложения. Для первого запроса (initial) создаётся только вид. Для последующих за-

просов (postback) могут производиться все эти или другие действия.

На фазе формирования образа (Rendering) запрошенный вид формируют как

ответ клиенту. Формирование — обычный процесс генерации выхода в формате HTML

или XHTML, который может быть прочитан клиентом (обычно окном просмотра).

Ниже приведен пример жизненного цикла приложения JavaServer Faces и показаны действия, которые происходят с видами на экране браузера.

1.Когда приложение helloWorld создано и развёрнуто на сервере, приложение находится в пассивном состоянии.

2.Когда клиент делает первый запрос (initial) для веб-страницы hello.xhtml,

компилируется Facelets-приложение helloWorld.

3.Скомпилированное Facelets-приложение выполняется, создается новое дерево компонент (UIViewRoot) для приложения helloWorld и сохраняется в

Faces Context.

4.Дерево компонент сопровождает компонент и возвращаемые значения

связываются со свойствами внешних бинов (представленными в EL-

выражении #{hello.world}).

5.Создаётся новый вид на основе дерева компонент.

6.Вид предоставляется запрашивающему клиенту как ответ.

7.Компонентное дерево автоматически уничтожается.

8.При последующих запросах (postback) восстанавливается компонентное дерево и используется его сохранённое состояние.

43

Соседние файлы в папке КСТ