- •Обозначения и сокращения
- •введение
- •1. Установка и настройка инструментальных средств
- •1.1. Установка и подготовка к работе операционной системы
- •1.2. Установка программного обеспечения
- •1.3. Создание таблиц в базе данных
- •2. Основы Java EE 6
- •2.1. Распределенные многоуровневые приложения
- •2.2. Контейнеры Java EE
- •2.3. Сервер GlassFish v3
- •2.4. Структура приложения
- •2.5. Конфигурирование приложений
- •2.6. Задание ссылок на ресурсы
- •4. Введение в компоненты Facelets
- •4.1. Веб-страницы
- •4.2. Разработка простого приложения Facelets
- •4.3. Использование шаблонов
- •5. Унифицированный язык записи выражений
- •6.1. Добавление компонент библиотеки HTML на страницу
- •6.2. Использование компонент для таблиц баз данных
- •6.3. Использование тегов библиотеки Core
- •7. Использование конвертеров, слушателей и проверок
- •7.1. Использование стандартных преобразователей
- •7.2. Регистрация слушателей для компонентов
- •8. Внешние объекты (JavaBeans)
- •8.1. Создание класса внешних объектов
- •8.2. Описание свойств бинов
- •8.3. Написание методов внешних бинов
- •8.4. Проверка бинами
- •9.1. Файл конфигурации ресурсов приложения
- •9.2. Упорядочение ресурсов конфигурации приложения
- •9.3. Конфигурирование состояния проекта
- •9.4. Выбор конфигурации бина
- •9.5. Регистрация сообщений об ошибках как пакет ресурса
- •9.7. Конфигурирование правил навигации (Navigation Rules)
- •9.8. Основные требования приложения JavaServer Faces
- •10. Технология Java Servlet
- •11. Введение в Java Persistence API
- •11.1. Требования к классам сущностей
- •11.3. Внедряемые классы в сущностях
- •11.4. Наследование сущностей
- •11.5. Стратегии наследования сущностей с отображением
- •11.6. Управление сущностями
- •11.7. Запросы сущностей
- •12. Примеры хранимых сущностей
- •12.1. Приложение order
- •12.2. Пример получения схемы отношений на основе таблиц БД
- •13.1. Терминология языка запросов
- •13.3. Упрощенный синтаксис языка запросов
- •13.4. Примеры запросов
- •13.5. Запросы с навигацией связанных сущностей
- •13.6. Запросы с другими условными выражениями
- •13.7. Изменение и удаление группы сущностей
- •13.8. Полный синтаксис языка запросов
- •14. Язык запросов Criteria API
- •14.3. Корни запроса
- •14.4. Использование объединения в запросе
- •14.5. Навигация путей в запросах
- •14.6. Ограничения на результаты запроса
- •14.7. Управление результатами запросов
- •14.8. Исполнение запросов
- •15. Связывание ресурсов
- •15.1. Ресурсы и служба имен JNDI
- •15.2. Объекты DataSource и пулы соединений (Connection Pools)
- •15.3. Внедрение ресурсов
- •15.4. Адаптеры ресурсов
- •15.5. Аннотации метаданных
- •16. Безопасность веб-приложений
- •16.1. Краткий обзор
- •16.2. Механизмы обеспечения безопасности
- •16.3. Безопасность сервера предприятия
- •16.4. Использование защищенного соединения SSL
- •18. Пример приложения
- •18.1. Создание проекта веб-приложения
- •18.3.Структура приложения JavaEE 6
- •18.4. Программирование вида для объектов
- •18.5. Дизайн главной страницы
- •18.6. Страница просмотра записей таблицы городов
- •18.7. Страница добавления записей о городах
- •18.8. Страница редактирования записей о городах
- •18.9. Страница удаления записей о городах
- •19. Обработка связей внешних ключей
- •19.1. Разработка класса для вида сущности
- •19.2. Доработка вида для городов
- •19.3. Разработка обзорной страницы
- •19.5. Страница для редактирования записей с внешними ключами
- •20. Дополнительные функции
- •20.1. Сортировка записей таблицы
- •20.2. Контроль за удалением связанных записей
- •20.3. Контроль ввода наименований
- •20.4. Запросы к БД на языке Java Persistence Query Language
- •20.5. Управление страницами при просмотре таблицы
- •20.6. Создание и просмотр отчетов
- •20.7. Использование шаблонов и стилей
- •20.8. Защита приложения паролем
- •Заключение
- •Библиографический список
<h:outputText value="Просмотр всех" /> </h:commandLink>
</h:form>
<br/>
<h:form>
<h:commandLink action="queryAge"> <h:outputText value="Запрос по возрасту" />
</h:commandLink>
</h:form>
</td>
</tr>
</table>
</f:view>
</body>
</html>
20.7. Использование шаблонов и стилей
Для унификации внешнего вида страниц приложения технология Java EE 6
предлагает использовать шаблоны страниц (темплеты), определяющие общие эле-
менты страниц и их оформление.
Создадим файл шаблона (Создать – JavaServer Faces – Facelets Template) с
именем template.xhtml в корневой папке приложения:
Файл template.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><ui:insert name="title">Default Title</ui:insert></
title>
<h:outputStylesheet name="css/jsfcrud.css"/> </h:head>
<h:body>
<h1>
<ui:insert name="title">Default Title</ui:insert> </h1>
<p>
<ui:insert name="body">Default Body</ui:insert>
</p>
</h:body>
</html>
263
Заменим во всех страницах приложения (файлы с расширением xhtml):
•начальный фрагмент
<h:head>
<title> . . . </title> </h:head>
<h:body>
на
<ui:composition template="/template.xhtml"> <ui:define name="title">
<h:outputText value=" . . . "></h:outputText> </ui:define>
<ui:define name="body">
•конечный фрагмент
</body>
на
</ui:define>
</ui:composition>
Здесь многоточие соответствует ранее использованному тексту заголовка
страницы.
Добавим файлстаблицейстилейjsfcrud.css впапку.../Example/web/resources/css.
Внешний вид модифицированных страниц существенно изменится в лучшую сторону.
Файл jsfcrud.css
root {
display: block;
}
body {
font-family: Arial, Helvetica, sans-serif; color: green;
background-color: #ccffff; font-size: small;
}
a {
color: blue;
}
table {
empty-cells: show;
}
form.jsfcrud_list_form th, td th { font-size: x-small;
color: #3b4c57; border-top-style: solid;
border-bottom-style: solid; border-left-style: solid; border-right-style: solid; border-top-width: 1px; border-bottom-width: 1px; border-left-width: 1px;
264
border-right-width: 1px; border-top-color: #6e828c; border-bottom-color: #6e828c; border-left-color: #6e828c; border-right-color: #6e828c; letter-spacing: 3px; text-align: left; padding-top: 6px; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; background-color: #b2d5d6;
}
td {
vertical-align: top; padding-bottom: 8px; font-size: small;
}
form.jsfcrud_list_form td, td td { border-top-style: solid; border-bottom-style: solid; border-left-style: solid; border-right-style: solid; border-top-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-right-width: 1px; border-top-color: #6e828c; border-bottom-color: #6e828c; border-left-color: #6e828c; border-right-color: #6e828c; vertical-align: baseline; padding-bottom: 0px;
}
tr.jsfcrud_odd_row { background-color: #fefeff; color: #4e6a71;
}
tr.jsfcrud_even_row { background-color: #eff5fa;
color: #4e6a71;
}
#busyImage {
position: absolute; left: 50%;
top: 50%;
}
265
20.8.Защита приложения паролем
20.8.1.Регистрация пользователя на сервере
1.Запустите Administration Console, если вы еще не сделали это. Для того
чтобы запустить Administration Console, откройте окно просмотра веб и задайте URL http://localhost:4848/.
2.В дереве навигации разверните узел Configurations, затем разверните узел server-config.
3.Разверните узел Security.
4.Разверните узел Realms.
5.Выберите область file, в которую вы добавляете пользователей. Страница
Edit Realm открывается.
6.Щелкните кнопку Manage Users на странице Edit Realm. Открывается страни-
ца File Users.
7.На странице File Users сделайте щелчок по кнопке New, чтобы добавить нового пользователя к области. Открывается страница New File Realm User.
8.Занесите значения в поля User ID, Group List, New Password и Confirm New
Password. Например (рис. 20.1):
User ID |
petrov |
|
Group List |
student |
|
New Password |
dfcbkbq |
|
Confirm New Password |
dfcbkbq |
|
|
|
|
|
|
|
Рис. 20.1. Регистрация пользователя на сервере
9. Нажать кнопку ОК.
10. Выйти из консоли администратора.
266
20.8.2.Установка защиты ресурсов приложения
1.Развернуть узел web.xml и вкладку «Безопасность»
2.В узле «Настройки входа» установить режим «Основной». Ввести имя об-
ласти file.
3.В узле «Роли безопасности» добавить роль student с произвольным описанием.
4.В узле «Ограничения безопасности» нажать кнопку «Добавление ограниче-
ния безопасности» и отредактировать содержимое предложенной формы (рис. 20.2).
Отображаемое имя задаёт показываемый текст ограничения. Установить ре-
жим проверки подлинности. Задать имя роли student для контроля полномочий пользователя. Ранее это имя роли задано как принадлежность к группе. В набор (сбор)
защищаемых веб-ресурсов добавить ресурс и отредактировать форму на рис. 20.3.
Рис. 20.2 .Добавление ограничения безопасности
Рис. 20.3 Задание/изменение веб-ресурса
Имя ресурса обычно совпадает с именем приложения или его части. Шаблон
адресов содержит список защищаемых ресурсов через запятую. На рисунке приве-
ден пример защиты страницы добавления клиента некоторого условного приложения.
Защита всех страниц может быть сделана шаблоном /faces/*
5. Сохранить все сделанные изменения.
267
21. Курсовое проектирование
по дисциплине "Клиент-серверные технологии"
Задачей курсового проекта является демонстрация студентом компетенций
разработчика веб-приложений на примере небольшой информационной системы.
Стандартными компетенциями в этой области являются следующие:
1.Разработка информационной модели предметной области и ее погружение
всвязанные таблицы реляционной СУБД. Умение создавать описания нормализованных таблиц с первичными и внешними ключами, с данными наи-
более употребительных типов: числа, строки, даты, деньги.
2.Создание на основе имеющихся в БД таблиц схемы БД в среде разработки
веб-приложений, например, NetBeans.
3.Разработка интерфейсных классов сущностей, фасадов и видов, необходимых для создания страниц приложения.
4.Разработка бизнес-логики приложения и ее погружение в интерфейсные
классы.
5.Разработка страниц для отображения данных и размещения органов управления приложением.
6.Отладка приложения на веб-сервере в операционной системе Linux.
7.Развертывание веб-приложения на сервере заказчика.
8.Подготовка технической документации в соответствии с ГОСТ на примере пояснительной записки к курсовому проекту [10].
9.Публичная защита результатов проектирования перед комиссией.
Рекомендуемые задачи для курсового проектирования
Исходя из перечисленных целей курсового проектирования, студенту рекомен-
дуется выбрать предметную область, хорошо знакомую по его прошлому опыту, что-
бы быстро преодолеть проблемы первых двух требований и приступить к проектированию классов и интерфейсов приложения. Такими предметными областями могут быть учет состояния и подготовка справок по заказу пользователя небольшой группы (два–три) связанных объектов.
1.Ежедневник — перечень событий, запланированных и состоявшихся в произ-
вольный период времени.
2.Контроль выполнения работником поручений.
3.Состояние библиотеки книг, дисков и других материалов.
4.Состояние запасов расходных материалов.
5.Учет заказов на услуги сервисного предприятия.
6.Учет состава офисного оборудования на предприятии.
7.Учет посещаемости и успеваемости студентов группы.
8.Учет кадрового состава проекта.
268