- •Тема 1. Разработка простейших веб-приложений
- •Тема 2. Взаимодействие с сервлетом
- •Тема 3. Контекст сервлета
- •Тема 4. Веб-сессия
- •Тема 5. Фильтры и взаимодействие сервлетов
- •Тема 6. Безопасность веб-приложений
- •Тема 7. Введение в JSP
- •Тема 8. Встроенные объекты JSP
- •Тема 9. Стандартные действия и JavaBeans
- •Тема 10. Выражения JSP Expression Language
- •Тема 11. JSP Standard Tag Library
- •Тема 12. Локализация веб-приложений
- •Тема 13. Настраиваемые теги JSP
- •Тема 14. Взаимодействие с БД в веб-приложениях
- •Тема 15. Запросы к БД
Учебное пособие по web-программированию (2013)
Рисунок 12.3.
Дополнительную информацию можно найти по адресу: http://www.tutorialspoint.com/servlets/servlets-internationalization.htm http://www.tutorialspoint.com/jsp/jsp_internationalization.htm
Тема 13. Настраиваемые теги JSP
Основы реализации настраиваемых тегов, обеспечивающих повторное использование бизнес-логики на различных веб-страницах. Подход к построению пользовательской библиотеки настраиваемых тегов.
Схема работы настраиваемых тегов приведена на рисунке 13.1.
Рисунок 13.1.
Пользователь обращается к настраиваемому тегу на JSP-странице, соответствующий тег находится в библиотеке тегов, затем в библиотеке тегов находится ссылка на соответствующий обработчик.
Соответственно, для работы настраиваемых тегов необходимо описать тег в библиотеке тегов и реализовать соответствующий java-класс. Подключение библиотеки тегов осуществляется с использованием тех же методов, что были описаны в 10 теме (директива <%@ taglib %>):
<%@ taglib prefix="mine" uri="WEB-INF/tlds/mytaglib.tld"%>
Общая структура библиотеки тегов:
<taglib> <tlib-version>2.0</tlib-version>
-58-
Учебное пособие по web-программированию (2013)
<jsp-version>2.0</jsp-version> <short-name>имя_библиотеки</short-name> <uri>путь_библиотеки</uri> <description>описание</description>
<tag>
<name>имя_тега</name> <tag-class>имя_класса</tag-class> <body-content>empty|scriptless</body-content> <atribute>
<name>имя_атрибута</name> </atribute>
</tag>
</taglib>
В теге «tag» описан обработчик тега, при этом возможны следующие варианты:
пустой тег без атрибутов
пустой тег с атрибутами
не пустой тег без атрибутов
не пустой тег с атрибутами
При создании обработчика тега средствами NetBeans информация в библиотеку тегов может записываться автоматически с использованием «мастера».
Обработчик тега должен наследоваться от класса javax.servlet.jsp.tagext.SimpleTagSupport.
Пример не пустого тега с одним строковым атрибутом, сгенерированным с использованием NetBeans приведены на рисунках 13.2 (обработчик тега), 13.3 (библиотека тегов), 13.4 (пример использования).
Рисунок 13.2.
-59-
Учебное пособие по web-программированию (2013)
Рисунок 13.3.
Рисунок 13.4.
Для работы с «телом тега» в JSP можно воспользоваться методом getJspBody() класса javax.servlet.jsp.tagext.SimpleTagSupport. В результате будет получен экземпляр класса JspFragment, использование метода invoke(StringWriter writer) позволяет получить в переменную writer «тело тега» (рисунок 13.5).
-60-
Учебное пособие по web-программированию (2013)
Рисунок 13.5.
Дополнительную информацию можно найти по адресу: http://www.tutorialspoint.com/jsp/jsp_custom_tags.htm
Тема 14. Взаимодействие с БД в веб-приложениях
Возможности создания in-memory баз данных с использованием HyperSQLDB и построения приложений с выделенным слоем взаимодействия с БД на основе Hibernate. Настройка слоя Hibernate и выборка данных из одной таблицы.
Существуют различные средства создания Data Layer — слоёв доступа к данным (начало 1 темы). В общем случае в качестве слоя доступа к данным используется ORM (object-relational mapping), который выступает в качестве прослойки между приложением и реляционной базой данных и с одной стороны обеспечивает приложению переносимость от одной БД на другую, с другой стороны упрощает разработчику работу с данными в БД, т. к. у разработчика появляется возможность взаимодействовать с данными в БД как с обычными объектами.
-61-
Учебное пособие по web-программированию (2013)
Рисунок 14.1.
В сети интернет существует большое количество описаний ORM. Мы будем рассматривать ORM Hibernate. Пример описания:
http://www.tutorialspoint.com/hibernate/hibernate_quick_guide.htm
Преимущества Hibernate (http://www.hibernate.org/):
Маппинг java-объектов на БД
Простое API для сохранения и получения объектов из БД
При изменении структуры БД нужно только изменить XML-описание, чтобы связка заработала
Скрытие от разработчика SQL-запросов
Не нужен сервер для выполнения операций
Управляет сложными связями объектов между собой
Предоставляет простой интерфейс получения данных
Вкачестве БД для приложения будем использовать Hyper SQL DB (http://hsqldb.org). Основные преимущества данной БД:
Маленький объём (всего 1.4М)
Возможность работы напрямую с файлами
Возможность запуска в виде полноценного сервера
Возможность подключения DataLayer
Написана на Java и может быть запущена без инсталляции на компьютере
Ключевым файлом в Hyper SQL DB является hsqldb.jar. Запуск визуального средства по работе с БД:
> java -classpath ./lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing
В учебных целях создадим таблицу и добавим данные (рисунок 14.2):
CREATE TABLE TEST
(ID INTEGER NOT NULL PRIMARY KEY, NAME VARCHAR(60),
AMOUNT DOUBLE)
INSERT INTO TEST VALUES(1,'serge',12.3) INSERT INTO TEST VALUES(2,'michael',14.3)
-62-
Учебное пособие по web-программированию (2013)
Рисунок 14.2.
С использованием «мастеров» NetBeans создаём проект, поддерживающий
Hibernate (рисунок 14.3).
Рисунок 14.3.
С использованием «мастеров» NetBeans создаём «Классы сущностей из базы данных...» (рисунок 14.4).
-63-
Учебное пособие по web-программированию (2013)
Рисунок 14.4.
В результате для доступа к таблице test будет создан класс (рисунок 14.5). Обратите внимание, что большая часть информации по работе с БД описывается с использованием Java-аннотаций, а доступ к полям осуществляется стандартными get и set методами.
Рисунок 14.5.
Сопоставление сгенерированных классов и таблиц может быть выполнено с использованием hdm.xml файла, который создаётся «мастером» (мастер называется «Мастер сопоставления Hibernate»), на который достаточно сделать ссылку в cfg.xmlфайле (рисунок 14.6). Обратите внимание, что в сгенерированном файле сопоставления есть ссылки только на названия таблиц, а сопоставление полей придётся описывать вручную.
-64-
Учебное пособие по web-программированию (2013)
Рисунок 14.6.
Пример доработки hibernate.hbm.xml файла, в котором кроме таблиц описано сопоставление атрибутов классов и полей БД приведено на рисунке 14.7.
Рисунок 14.7.
Создание фабрики доступа к Hibernate удобно делать с помощью класса
HibernateUtil.java (рисунок 14.8).
-65-
Учебное пособие по web-программированию (2013)
Рисунок 14.7.
Пример класса доступа к БД с использованием Hibernate и результата доступа приведён на рисунке 14.8. В данном примере доступ к БД помещается в конструкцию try-catch-finally, в которой в части finally выполняется закрытие сессии. Сессия создаётся с использованием фабрики в HibernateUtil, открывается транзакция и выполняется выборка всех объектов Test из БД. При успешном окончании транзакции она помечается как выполненная успешно комадной commit().
Дополнительную информацию можно найти по адресу: http://www.tutorialspoint.com/hibernate/hibernate_quick_guide.htm http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm http://www.tutorialspoint.com/hibernate/hibernate_criteria_queries.htm http://www.tutorialspoint.com/hibernate/hibernate_annotations.htm
-66-