Скачиваний:
90
Добавлен:
09.05.2014
Размер:
785.64 Кб
Скачать

propertyИмя свойства, значение которого необходимо получить

Значения атрибутов в тегах jsp:setProperty и jsp:getProperty ссылаются на объект, который получается из объекта pageContext с

помощью метода findAttribute ().

Пример использования тега jsp:getProperty представлен в следующем листинге:

Листинг примера использования тега jsp:getProperty

<jsp:useBean id="itemBean" ... />

...

<ul>

<li>Количество предметов : <jsp:getProperty name="itemBean" property="numItems" /></li> <li>Цена за штуку : <jsp:getProperty name="itemBean" property="unitCost" /></li>

</ul>

Java Server Page. Действие jsp:include

Действие jsp:include позволяет подключать статические и динамические ресурсы в контекст текущей страницы JSP. Так, например, выходной поток сервлета может быть включен в содержимое страницы JSP. Тогда при вызове страницы JSP выходной поток сервлета будет встроен в выходной поток JSP. Ресурс определяется по его относительному URL-адресу, который интерпретируется в контекст Web-сервера.

В отличие от директивы include, которая вставляет файл на этапе трансляции страницы JSP, действие jsp:include вставляет файл при запросе страницы. Это приводит к некоторой потере эффективности и исключает возможность наличия во вставляемом файле кода JSP, но дает существенное преимущество в гибкости. Если рассмотреть в качестве примера JSP-страницу, которая вставляет четыре различных отрывка в Web страницу с новостями сайта. Каждый раз когда меняются заголовки автору достаточно изменить содержимое четырех файлов, тогда как главная JSP страница остается неизменной.

Действие jsp:include имеет следующий синтаксис:

Два варианта синтаксиса действия jsp:include

<!-- Первый вариант записи тега jsp:include -->

<jsp:include page="URLАдрес" [flush="true" | "false"] />

<!-- Второй вариант записи тега jsp:include -->

<jsp:include page="URLАдрес" [flush="true"]> <jsp:param .../>

[<jsp:param .../> [...] ]

</jsp:include>

Примером может быть включение страницы-приветствия:

<jsp:include page="/general/welcome.html" />

Тег jsp:include имеет атрибуты, представленные в таблице.

Атрибут

Описание атрибута

Атрибут page определяется относительно текущей страницы JSP. Включаемая страница имеет доступ только к page

объекту JspWriter и не может устанавливать заголовки

Необязательный атрибут flush управляет переполнением. Если этот атрибут имеет значение true и выходной flush поток страницы JSP буферизуется, то буфер освобождается при переполнении, в противном случае - не

освобождается. По умолчанию значение атрибута flush равно false

Действие jsp:include может включать элементы jsp:param, которые предоставляют значения для некоторых параметров запроса, используемые для включения.

Java Server Page. Действие jsp:forward

Действие jsp:forward позволяет во время выполнения страницы JSP перенаправлять текущий запрос на другую страницу JSP, некоторый статический ресурс или класс Java-сервлета, находящийся в том же контексте, что и текущая страница JSP. Действие jsp:forward имеет следующий синтаксис :

Два варианта синтаксиса действия jsp:forward

<!--Первый вариант записи тега jsp:forward -->

<jsp:forward page="URLАдрес" [flush="true" | "false"] />

<!-- Второй вариант записи тега jsp:forward -->

<jsp:forward page="URLАдрес" [flush="true"]> <jsp:param .../>

[<jsp:param .../> [...] ]

</jsp:forward>

Смысл атрибутов page и flush тот же, что и в случае тега jsp:include.

Действие jsp:forward, как и тега jsp:include, может включать элементы jsp:param , которые предоставляют значения для некоторых параметров запроса, используемые для перенаправления.

Java Server Page. Действие jsp:plugin

Действие jsp:plugin позволяет:

разработчику страницы JSP создавать HTML-код, который содержит конструкции (OBJECT или EMBED), вызывающие загрузку в Webбраузер клиента некоторого дополнительного Java-модуля (компонента JavaBean или апплета);

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

Тег jsp:plugin замещается тегом OBJECT или EMBED. Пользователь получает дополнительные модули в составе ответа. Действие jsp:plugin имеет следующий синтасис:

Синтаксис действия jsp:plugin

<jsp:plugin type="bean | applet" /> code="кодОбъекта" codebase="размещениеОбъекта" {align="выравнивание"} {archive="списокАрхивов"} {height="высота"} {hspace="горизонтальныйОтступ"} {jreversion="номерВерсии"} {name="наименованиеКомпонента"} {vspace="вертикальныйОтступ"} {width="ширина"}

{nspluginurl="urlАдресДляNetscapeNavigator"} {iepluginurl="urlАдресДляInternetExplorer"}>

{<jsp:params

<jsp:param name="наименованиеПараметра" value="значениеПараметра" />

</jsp:params}

{<jsp:fallback>произвольный текст </jsp:fallback>}

</jsp:plugin>

Атрибуты действия jsp:plugin, представленные в таблице, обеспечивают конфигурационные данные для предоставления соответствующего элемента.

 

Атрибут

 

 

Описание атрибута

 

 

 

 

 

 

 

 

 

 

 

 

type

 

 

Определение типа объекта : компонент JavaBean или апплет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

code

 

 

Код объекта в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

 

codebase

 

 

Расположение объекта в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

align

 

 

Выравнивание объекта в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

 

archive

 

 

Список архивов в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

 

height

 

 

Размер объекта по высоте в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

hspace

 

 

Горизонтальный отступ объекта в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

jreversion

 

 

Идентифицирует номер версии спецификации JRE (по умолчанию - "1.2")

 

 

 

 

 

 

 

 

 

 

 

name

 

 

Наименование компонента в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

 

 

hspace

 

 

Вертикальный отступ в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

 

width

 

 

Размер объекта по ширине в соответствии со спецификацией HTML

 

 

 

 

 

 

 

 

 

 

 

nspluginurl

 

 

URL-адрес для браузера Netscape Namvigator, откуда может быть загружен образец

 

 

 

 

 

 

 

 

 

 

 

iepluginurl

 

 

URL-адрес для браузера Internet Explorer, откуда может быть загружен образец

 

 

 

 

 

 

 

 

 

 

 

Элементы jsp:param определяют параметры апплета или комопнента JavaBean, элементы jsp:fallback - некоторое содержание, используемое браузером клиента в том случае, если дополнительный модуль по какой-либо причине не может быть вызван, если OBJECT / EMBED не поддерживаются браузером клиента или при возникновении других проблем. Действие jsp:fallback, как и jsp:params, является "дочерним" действием тега jsp:plugin и вне тега не применяется.

Коды загружаемых образцов могут не поставляться вместе с контейнером JSP поставщика, вместо реального кода могут использоваться ссылки на стандартные образцы фирмы "Sun Microsystems".

Java Server Page. Действие jsp:param

Действие jsp:param позволяет задавать значения параметрам в следующих конструкциях: jsp:include

jsp:forward

jsp:plugin

jsp:params

Например, при выполнении тега jsp:include или jsp:forward (использование включаемой или перенаправляемой страницы JSP), новые параметры или методы forwardпередаются в момент выполнения действий с помощью параметров.

Действие jsp:param имеет следующий синтасис:

Синтаксис действия jsp:param

<jsp:param name="наименованиеПараметра" value="значениеПараметра" />

Пример использования тега jsp:param для определения значения параметра апплета:

Листинг передачи параметра в апплет

<jsp:plugin

type = "applet"

code = "customer.class" height= "20"

width = "30"> <jsp:params>

<jsp:param name="client" value="Guest Ltd." /> </jsp:params>

</jsp:plugin>

Java Server Page. Неявные объекты

Неявные объекты (implicit objects) - это объекты, автоматически доступные как часть стандарта JSP без их специального объявления или импорта. Эти объекты, список которых представлен в таблице, можно использовать в коде JSP.

 

Наименование

 

 

Тип объекта

 

 

Назначение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

объекта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запрос, требующий обслуживания. Область видимости - запрос.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Основные методы : getAttribute, getParameter, getParameterNames,

 

 

 

 

 

 

 

 

getParameterValues

 

 

request (запрос)

 

 

javax.servlet.HttpServletRequest

 

 

Таким образом, запрос request обеспечивает обращение к

 

 

 

 

 

 

 

 

параметрам запроса через метод getParameter, типу запроса (GET,

 

 

 

 

 

 

 

 

POST, HEAD, и т.д.), и входящим HTTP заголовкам (cookies, Referer и

 

 

 

 

 

 

 

 

т.д.).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ответ на запрос. Область видимости - страница. Поскольку поток

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вывода (см. out далее) буферизован, можно изменять коды

 

 

response (ответ)

 

 

javax.servlet.HttpServletResponse

 

 

состояния HTTP и заголовки ответов, даже если это недопустимо в

 

 

 

 

 

 

 

 

обычном сервлете, но лишь в том случае, если какие-то данные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вывода уже были отправлены клиенту.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объект, который пишет в выходной поток. Область видимости -

 

 

 

 

 

 

 

 

 

 

out (вывод)

 

 

javax.servlet.jsp.JspWriter

 

 

страница. Основные методы : clear, clearBuffer, flush, getBufferSize,

 

 

 

 

 

 

 

 

getRemaining.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Необходимо помнить, размер буфера можно изменять и даже

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

отключить буферизацию, изменяя значение

 

 

 

 

 

 

 

 

атрибутаbuffer директивы page. Также необходимо обратить

 

 

 

 

 

 

 

 

внимание, что out используется практически исключительно

 

 

 

 

 

 

 

 

скриплетами, поскольку выражения JSP автоматически

 

 

 

 

 

 

 

 

помещаются в поток вывода, что избавляет от необходимости

 

 

 

 

 

 

 

 

явного обращения к out.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Содержимое JSP-страницы. Область видимости -

 

 

pageContext

 

 

 

 

 

страница. pageContext поддерживает доступ к полезным объектам

 

 

 

 

 

 

 

 

 

 

 

 

 

и методам, обеспечивающим явный доступ реализации JSP к

 

 

(содержание

 

 

javax.servlet.jsp.pageContext

 

 

 

 

 

 

 

 

специфическим объектам. Основные методы : getSession, getPage,

 

 

страницы)

 

 

 

 

 

 

 

 

 

 

 

 

findAttribute, getAttribute, getAttributeScope,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

getAttributeNamesInScope, getException.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объект типа Session, создаваемый для клиента, приславшего

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

запрос. Область видимости - страница. Основные методы getId,

 

 

 

 

 

 

 

 

getValue, getValueNames, putValue.

 

 

 

 

 

 

 

 

Сессии создаются автоматически, и переменная session существует

 

 

session (сеанс)

 

 

javax.servlet.HttpSession

 

 

даже если нет ссылок на входящие сессии. Единственным

 

 

 

 

 

 

 

 

исключением является ситуация, когда разработчик отключает

 

 

 

 

 

 

 

 

использование сессий, используя атрибут session директивы page.

 

 

 

 

 

 

 

 

В этом случае ссылки на переменную session приводят к

 

 

 

 

 

 

 

 

возникновению ошибок при трансляции JSP страницы в сервлет.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Контекст сервлета, полученный из объекта конфигурации сервлета

 

 

application

 

 

javax.servlet.ServletContext

 

 

при вызове методов : getServletConfig или getContext. Область

 

 

 

 

 

 

 

(приложение)

 

 

 

 

видимости - приложение. Основные методы : getMimeType,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

getRealPath.

 

 

 

 

 

 

 

 

 

 

 

config

 

 

 

 

 

Объект ServletConfig текущей страницы JSP. Область видимости -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

javax.servlet.ServletConfig

 

 

страница. Основные методы : getInitParameter,

 

 

(конфигурация)

 

 

 

 

 

 

 

 

 

 

 

getInitParameterNames

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Экземпляр класса реализации текущей страницы JSP,

 

 

 

 

 

 

 

 

 

 

page (страница)

 

 

java.lang.Object

 

 

обрабатывающий запрос. Область видимости - страница. Объект

 

 

 

 

 

 

 

 

 

 

 

доступен, но, как правило, используется редко. По сути является

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

синонимом для this, и не нужен при работе с Java.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

exception

 

 

 

 

 

Объект Throwable, выводимый в страницу ошибок error page.

 

 

 

 

 

 

 

 

 

 

java.lang.Throwable

 

 

Область видимости - страница. Основные методы :printStackTrace,

 

 

(исключение)

 

 

 

 

 

 

 

 

 

 

 

toString, getMessage, getLocalizedMessage.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Java Server Page. Компонент JavaBean

Компоненты JavaBeans – это многократно используемые классы Java, позволяющие разработчикам существенно ускорять процесс разработкии WEB-приложений путем их сборки из программных компонентов. JavaBeans и другие компонентные технологии привели к появлению нового типа программирования – сборки приложений из компонентов, при котором разработчик должен знать только сервисы компонентов; детали реализации компонентов не играют никакой роли.

Компоненты JavaBean – это одноуровневые объекты, использующиеся для того, чтобы инкапсулировать в одном объекте сложный код, данные или и то и другое. КомпонентJavaBean может иметь свойства, методы и события, открытые для удаленного доступа. Компонент JavaBean – это java-класс, удовлетворяющий определенным соглашениям о наименовании методов и экспортируемых событий. Одним из важных понятий технологииJavaBeans является внешний интерфейс properties (свойства). Property – это пара методов (getter и setter), обеспечивающих доступ к информации о внутреннем состоянии компонента JavaBean.

Для обращения к компонентам JavaBeans на странице JSP необходимо использовать следующее описание тега в разделе head :

<jsp:useBean id="BeanID" [scope="page | request | session | application"] class="BeanClass" />

BeanID определяет имя компонента JavaBean, являющееся уникальным в области видимости, заданной атрибутом scope. По умолчанию принимается область видимостиscope="page", т.е. текущая страница JSP.

Обязательный атрибут класса компонента "class" может быть описан следующим способом:

class="имя класса" [type="полное имя суперкласса"]

Свойство компонента JavaBean с именем myBean устанавливается тегом:

<jsp:setProperty name="myBean" property="Имя свойства" value="Строка или выражение JSP" />

Для чтения свойства компонента JavaBean с именем myBean используется тег:

<jsp:getProperty name="myBean" property="Имя свойства" />

В следующем листинге приведен пример компонента JavaBean, содержащего строку mystr, используемую в качестве свойств.

Листинг компонента JavaBean

package beans;

public class myBean

{

private String mystr; //----------------------------------------------

public void setMystr(String mystr)

{

this.mystr = mystr;

}

//----------------------------------------------

public String getMystr()

{

return mystr;

}

//----------------------------------------------

}

Java Server Page. Теги JSP

В соответствии с определением в спецификации JSP библиотека тегов – это коллекция действий, инкапсулирующих некоторую функциональность, которые могут использоваться из страницы JSP. То есть, библиотека тегов представляет собой java-классы, реализующие определенную бизнес-логику в соответствии с Tag Libraries Interface (интерфейс библиотеки тегов).

Структура тегов напоминает структуру сервлетов, которые могут быть многократно использованы в течение цикла жизни тегов. Библиотека тегов включает один или несколько тегов-классов и XML-дескриптор, содержащий описание тегов и параметров, используемых тегами.

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

Существенным преимуществом использования библиотеки тегов перед компонентами JavaBean заключается в том, что тег (java-класс) имеет доступ к странице JSP и может оперировать содержимым самой страницы JSP.

Библиотека тегов может определять сложные расчеты в более компактной форме. Однако установка библиотек тегов требует большей работы по сравнению с компонентамиJavaBean. Компоненты JavaBean особенно эффективны для организации взаимодействия между другими компонентами, поскольку компонент JavaBean может быть создан в одном сервлете, а использоваться другими сервлетами и JSP. Библиотеки тегов, как правило, представляют более замкнутую и самодостаточную систему.

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

Для использования/создания библиотеки тегов необходимо разработать:

класс (Tag handler class), обрабатывающий тег и определяющий его функциональные свойства;

XML-файл – дескриптор библиотеки тегов Tag Library Descriptor (файл TLD) – связывающий наименование элементов описания тегов с их реализацией.

Кроме вышеуказанных составляющих библиотеки тегов необходимо выполнить еще два условия использования библиотеки тегов: Зарегистрировать в дескрипторе поставки web.xml с помощью директивы описание месторасположения библиотеки тегов. Пример описания библиотеки тегов templates.tld в дескрипторе поставки web.xml:

<taglib>

<taglib-uri>/sdo<taglib-uri>

<taglib-location>/WEB-INF/tlds/templates.tld</taglib-location>

</taglib>

После этого на странице JSP можно использовать ссылку на библиотеку следующим образом:

<%@ taglib uri="/sdo" prefix="sdo %>

На странице JSP с помощью директивы необходимо указать месторасположение файла TLD. Пример описания библиотеки тегов templates.tld на странице JSP:

<%@ taglib uri=”/WEB-INF/tlds/usertags.tld" prefix="tag" %>

В данных примерах библиотека тегов templates.tld располагается в директории WEB-INF/tlds.

При компиляции страницы JSP в сервлет пользовательские теги преобразуются в действия над объектами серверной стороны. Интерфейсы и классы, с помощью которых создаются пользовательские теги, располагаются в пакете javax.servlet.jsp.tagext. Пользовательские действия определяются согласно следующей структуре:

открывающий тег – действие, выполняемое java-классом при открытии тега; тело действия;

закрывающий тег – действие, выполняемое java-классом при закрытии тега.

Java-класс, обрабатывающий тег, может реализовывать один из следующих интерфейсов:

Tag;

IterationTag;

BodyTag.

Интерфейс Tag

Интерфейс Tag, являющийся наиболее общим интерфейсом, поддерживает пользовательские действия в JSP и определяет следующие базовые методы, инициируемые контейнером:

setter методы для инициализации переменных;

doStartTag () – метод, определяющий начало обработки действия тега;

doEndTag () (либо doFinally () при использовании интерфейса TryCatchFinally ()) – метод, определяющий окончание обработки действия тега.

Когда контейнер обнаруживает дескриптор пользователя, он вызывает методы setPageContext () и setParent () объекта, реализующего интерфейс Tag. Затем контейнер вызывает метод doStartTag (), определяя начало выполнения действия, и завершает его вызовом метода doEndTag ().

Интерфейс IterationTag

Интерфейс IterationTag расширяет интерфейс Tag, добавляя метод doAfterBody (), используемый для перезагрузки тела. Метод doAfterBody () вызывается после каждой загрузки с тем, чтобы определить, требуется ли следующая перезагрузка.

Интерфейс BodyTag

Интерфейс BodyTag расширяет интерфейс IterationTag, добавляя два новых метода для манипуляции с телом тега: setBodyContent () – метод, посылающий в буфер объект BodyContent;

doInitBody () – метод, предоставляющий возможность обрабатывать буфер перед первой загрузкой в него тела тега.

Для обработчиков тегов можно использовать классы TagSupport, BodyTagSupport и TagExtraInfo в качестве базовых классов. Обработчик тега имеет доступ к API, позволяющему взаимодействовать с JSP-страницей. Входной точкой в API является объект контекста страницы javax.servlet.jsp.PageContext, через который обработчик тега может извлечь все другие внутренние объекты (запрос, сессию и приложение), доступные из JSP-страницы.

Использование тегов с атрибутами

Возможность использования тегов с атрибутами делает технологию использования библиотек тегов еще более гибкой. Обращение к пользовательскому тегу с атрибутами на странице JSP имеет следующий формат:

<prefix:tag_name attribute1='value1' attribute2='value2' .../>

Пример простейшего тега приведен в следующем листинге.

Java-класс простейшего заказного тега

package tags.sdo;

import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*;

public class InfoTag extends TagSupport

{

public int doStartTag () throws JspException

{

pageContext.getOut ().print ("Библиотека тегов"); return SKIP_BODY;

}

}

Исходный код необходимо откомпилировать обычным образом и установить в контейнер так же, как устанавливается сервлет. Необходимо контролировать соответствие пакетов Java и каталогов файловой системы : в каталоге WEB-INF/classes данный тег InfoTag.class должен быть установлен в подкаталог tags/sdo.

Java Server Page. Пример JSP-страницы

В отличие от сервлетов, требующих компиляции java-файла для получения класса (файла *.class) JSP-страницы не требуют компиляции и регистрации в дескрипторе поставкиweb.xml.

Контейнер сервлетов расширили препроцессором, переводящим запись страницы JSP в сервлет. Препроцессор обрабатывает страницу JSP автоматически при первом обращении к ней. Полученный в результате его работы сервлет тут же компилируется и выполняется. Откомпилированный сервлет затем сохраняется в WEB-контейнере так же, как и все сервлеты, и выполняется при последующих вызовах страницы JSP.

Листинг JSP-страницы HelloWorld.jsp

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<%@ page contentType="text/html; charset=windows-1251" %> <%@ page import="java.util.*, java.text.*" %>

<html>

<head>

<title>Простейшая страница JSP</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head>

<body>

Добро пожаловать! Сегодня <%= getFormattedDate () %>

</body>

</html>

<%!

String getFormattedDate ()

{

SimpleDateFormat sdf = new SimpleDateFormat ("dd.MM.yyyy hh:mm:ss"); return sdf.format (new Date ());

}

%>

Результатом выполнения данной JSP-страницы будет сформированный HTML-документ с приветствием и текущей датой.

Соседние файлы в папке лабораторная работа 6 (jsp)