Пользовательские действия (custom actions) в JSP. JSTL. Пользовательские действия (custom actions) Назначение: отделить вёрстку от программирования на JSP-страницах: Разработчики-программисты создают Java-компоненты, оформляемые в библиотеки тегов Дизайнеры и верстальщики используют эти теги для реализации действий на веб-страницах Пользовательский тег При вызове тегу задаются атрибуты Реализуется в виде объекта, имеющего кроме прочих специальные методы: выполнения действия освобождения памяти Использование библиотеки тегов На JSP-странице используется директива: <%@ taglib uri="/WEB-INF/hello_example.tld" prefix="t" %> которая указывает TLD-файл, описывающий библиотеку тегов в XMLформате Вызов действия в виде тега: <t:hello name="${param.username}" default="my friends" /> Краткая форма: <t:tag /> Полная форма: <t:fulltag atr1="val1" … atrn="valn"> тело тега </t:fulltag> Определение тегов. TLD-файл <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>Необязательное имя</short-name> <uri>http://my.domen.ru/taglibs/hellotaglib</uri> <description>Необязательное описание</description> <tag> <name>hello</name> <tag-class>jstlpg.tags.HelloTag</tag-class> <body-content>empty</body-content> <attribute> <name>username</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> Определение тегов. Объектобработчик тега. public class HelloTag extends TagSupport { private String name = null; public int doStartTag() throws JspException { try { pageContext.getOut().print("Hello."+(name==null?"":name)); } catch (Exception ex) { throw new JspTagException(ex.getMessage()); } return SKIP_BODY; } public void setUsername(String name) { this.name = name; } } Пример использования тега <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="/WEB-INF/hello_example.tld" prefix="t" %> <html><head> <title>Hello example</title> </head><body> <h1> <t:hello username="${param.name}" default="my friends" /> </h1> </body> </html> Библиотека стандартных пользовательских действий (JSTL) Основные теги позволяющие делать циклы, условия, выводить информацию на экран: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Теги для работы с xml-документами: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/xml" %> Теги для работы с базами данных: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/sql" %> Библиотека стандартных пользовательских действий (JSTL) <c:out name="Hello my friends" /> <c:set var="fio" scope="session" value="param.name" /> <c:import url="footer.jsp" /> <c:url value="/a3.jsp"> <c:param name="title" value="${param.title}" /> </c:url> Области видимости Страница (page) Запрос (request) Сессия (session) Приложение (application) Язык выражений Операторы: ==, !=, <, >, <=, >=, eq, ne, lt, gt, le, ge ${param.username} Проверка условий и итерации <c:if test="${not empty error}"> </c:if> <c:foreach var="book" items="${books}" begin="0" end="9"> </c:foreach> <c:foreach var="i" begin="${start}" end="${finish}"> </c:foreach> Упрощённый вариант тегов Тег создаётся не в виде java-программы, а в виде jsp Помещается в файл с расширением tag в специальной папке (/WEB-INF/tags ) В самом файле указываются атрибуты и т.д.