Введение
Пользовательские теги - это механизм расширения API JSP. Пользовательские теги позволяют декларативно расширять
страницы JSP. Теги JSP реализуются в Java, но активируются в JSP посредством тегов, схожих с тегами HTML. Однако, в
отличие от тегов HTML, теги JSP обрабатываются сервером, а не браузером клиента.
Пользовательские теги позволяют четко разграничить зоны ответственности между проектировщиками Web (разработчиками JSP)
и программистами на Java. Программисты на Java реализуют пользовательские теги JSP. Проектировщики Web выбирают эти
теги декларативно для активации реализации Java.
Проектировщик JSP "вызывает" код Java путем объявления тегов, а разработчик кода на Java создает код в обработчиках
тегов, как показано на следующей диаграмме.
Для создания пользовательского тега разработчик кода на Java должен предоставить два объекта:
Обработчик тегов
Обработчик тегов - это класс, реализующий интерфейс Tag. Два библиотечных класса обеспечивают простое создание
обработчиков тегов. Это классы javax.servlet.jsp.TagSupport и javax.servlet.jsp.BodyTagSupport. Класс
TagSupport применяется для тегов без тела, класс BodyTagSupport - для тегов с телом.
Ниже приведен пример простейшей возможной реализации обработчика тегов.
Дескриптор библиотеки тегов
Для того чтобы страница JSP могла использовать пользовательские теги JSP, необходимо создать дескриптор библиотеки
тегов. Это файл XML, развертываемый на Web-сервере вместе с обработчиками тегов.
Ниже приведен пример простого файла библиотеки тегов, содержащего дескриптор библиотеки тегов HelloWorld.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLScheme-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>simp</short-name>
<uri> http://www.inferdata.com/taglib/hello-world</uri>
<description>Простой пример пользовательского тега JSP</description>
<tag>
<name>hello</name>
<tag-class>com.inferdata.taglib.HelloWorld</tag-class>
<body-content>empty</body-content>
<description>Простой тег Hello world</description>
</tag>
</taglib>
|