Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 модуль.docx
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
92.62 Кб
Скачать

Действия

JSP-действия — это специальные теги, которые вызывают выполнение серверного кода. Действия подразделяются на стандартные и расширенные, подключающие код дополнительных библиотек — библиотек тегов.

Пример стандартного действия — действие include (не путать с директивой include):

<jsp:include page="page.jsp" />

Это действие вызывает передачу выполнения запроса странице page.jsp, по завершению обработки которой выполнение запроса продолжается текущей JSP-страницей.

Все стандартные действия имеют префикс «jsp:», их очень ограниченный набор: include, forward, useBean и некоторые другие.

14.4. Язык выражений

В спецификацию JSP, начиная с версии 2.0, был добавлен язык выражений (Expression Language, EL), позволяющий упростить доступ к данным.

Синтаксис:

${EL-выражение}

Примеры EL- выражений:

  • ${1+1};

  • ${!empty param.id} — возвращает true, если параметр id не пустой;

  • ${myArray[1]} — доступ к элементу массива;

  • ${myList[1]} — доступ к элементу списка (List);

  • ${employee.name} — доступ к свойству объекта;

  • ${myMap.key} — доступ к значению по ключу в объекте Map.

Конструкции EL-выражений могут помещаться:

  • внутри статического текста;

  • в качестве значений атрибутов, допускающих EL-выражения (при вызове библиотечного тега).

Предопределенные объекты

В EL-выражениях доступны следующие объекты:

  • рaram — объект Map, содержащий параметры запроса (аналог request.getParameter);

  • paramValues — объект Map, содержащий массив значений каждого параметра запроса (аналог request.getParameterValues);

  • pageScope — объект Map, содержащий атрибуты (установленные методом setAttribute) контекста страницы;

  • requestScope — объект Map, содержащий атрибуты контекста запроса;

  • sessionScope — объект Map, содержащий атрибуты контекста сессии;

  • applicationScope — объект Map, содержащий атрибуты контекста приложения.

Если, например, объект student размещается в контексте запроса, то обратиться к нему можно так:

${requestScope.student}

Данная конструкция аналогична следующей:

<%=request.getAttribute("student")%>

Кроме того, возможно обращение к объекту без указания контекста поиска, например:

${student}

В этом случае, объект student будет последовательно искаться в контексте страницы (pageScope), затем в контексте запроса (requestScope), сессии (sessionScope) и приложения (applicationScope).

14.5. Библиотеки тегов

Библиотеки тегов позволяют расширить функциональность JSP с помощью дополнительных тегов, выполняемых на стороне сервера, аналогично стандартным JSP-действиям (include, forward и проч.).

Библиотеки тегов решают две задачи:

  1. Инкапсулируют некоторую функциональность, часто востребованную при разработке JSP-страниц, что позволяет повторно использовать код.

  2. Помогают очистить код JSP-страниц от чрезмерного использования скриптовых элементов, сделать код более удобным к восприятию и в разработке.

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

Для этого нужно:

  1. Создать класс, реализующий специальный интерфейс javax.servlet.jsp.tagext.Tag, с требуемой функциональностью.

  2. Создать XML-файл с расширением .tld, содержащий определение тега (или тегов), где задаются URI библиотеки, названия тегов и другие параметры (в т. ч. название классов с реализацией).

  3. Добавить в JSP-страницу директиву, подключающую библиотеку тегов.

  4. Файл с определением библиотеки тегов и реализующие теги классы должны быть видны в контексте веб-приложения. Обычно классы и файл .tld, помещенный в папку META-INF, пакуют в архив, который помещают в папку WEB-INF/lib веб-приложения.

Пусть в файле с описанием библиотеки тегов параметр URI задан равным http://mytaglib/, тег имеет название list и в нем определен атрибут collection.

Тогда директива, подключающая нашу библиотеку в JSP будет выглядеть следующим образом:

<%@ taglib prefix="myprefix" uri=" http://mytaglib/" %>

А соответствующее JSP-действие так:

<myprefix:list collection="${students}" />

Обязательный атрибут prefix в директиве taglib определяет префикс для обращения к тегу myprefix:list. Он введен для того, чтобы была возможность при подключении нескольких библиотек тегов отличать теги друг от друга и от обычных HTML-тегов.

В качестве примера использования реальной библиотеки тегов можно рассмотреть стандартную библиотеку тегов JSP (JSP Standard Tag Library, JSTL). Она, в частности, содержит теги-условия и теги-итераторы:

<%--Если объект user не определен, то выводим "Вы еще не зашли в систему!"--%>

<c:if test="${empty user}">

Вы еще не зашли в систему!

</c:if>

<%-- Выводим список студентов--%>

<c:forEach var="student" items="${student}">

Имя: <c:out value="${student.firstName}" /><br />

Фамилия: <c:out value="${student.lastName}" /><br />

</c:forEach>

Кроме библиотеки JSTL существуют и другие готовые библиотеки тегов для различных нужд.

Пользовательские теги фактически являются альтернативой скриптлетам и позволяют создавать JSP-страницы без явного использования Java-кода, вынося код в реализацию конкретных тегов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]