Действия actions

Действия JSP actions могут воздействовать на стандартный поток вывода, использовать, модифицировать и создавать объекты. actions используют конструкции с синтаксисом XML для управления работой движка сервлета и позволяют, таким образом, динамически подключать файл, многократно использовать компоненты JavaBeans, направлять пользователя на другую страницу или генерировать HTML для Java plugin.

Согласно спецификации JSP, синтаксис actions базируется на XML. В таблице представлены соответствия определений JSP и XML.

Конструкция JSPЭквивалентная конструкция в XML
<% page ... %> <%jsp:directive.page ... />
<% include ... %> <%jsp:directive.include ... />
<%! ... %> <%jsp:declaration>
     . . .
<%/jsp:declaration>
<% ... %> <%/jsp:scriptlet>
     . . .
<%/jsp:scriptlet>
<%= ... %> <%/jsp:expression>
     . . .
<%/jsp:expression>

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

Список стандартных действий представлен в следующей таблице.

Тип действияНазначение действия
<jsp:useBean> Объявление объекта JavaBean, который будет использоваться на странице JSP
<jsp:setProperty> Установление значения свойства объекта JavaBean
<jsp:getProperty> Чтение значения свойства объекта JavaBean
<jsp:include> Включение в страницу JSP дополнительных статических и динамических ресурсов
<jsp:forward> Перенаправление обработки на другой статический ресурс, например сервлет
<jsp:plugin> Подключение дополнительных программных модулей (компонент JavaBean или апплет)
<jsp:param> Определение значения параметра

Атрибуты тега действия, action attribute

Для интерпретации действий определяются значения action attribute, слева-направо, причем, при этом могут совершаться преобразования типов, предусмотренные спецификацией JSP.

Значения атрибутов могут быть следующими:

  • translation-time, attribute values - фиксированное значение времени транслирования;
  • request-time, attribute values - значения, вычисляемые в процессе запроса. В этом случае значение атрибута описывается как "<%= выражение %>". Кавычки используются также, как и при определении других атрибутов. Значение action attribute присваивается как результат вызываемого выражения.

Значения action attribute, вычисляемые в процессе запросов, используются только в действиях, т.е. они, например, не могут использоваться в директивах. Тип элемента действия определяет, зависит ли данный атрибут от запроса или нет.

По умолчанию все атрибуты имеют семантику page - фиксированное значение времени транслирования. Большинство атрибутов стандартных действий относятся к типу значений времени трансляции. К значениям, вычисляемым в процессе запроса, относятся атрибуты, представленные в таблице.

Наименование атрибутаНаименование действияПримечание
beanName jsp:useBean Поиск или создание нового экземпляра JavaBean
height jsp:plugin Определение высоты объекта, размещаемого на странице JSP
width jsp:plugin Определение ширины объекта, размещаемого на странице JSP
bean | applet jsp:plugin Генерирование кода (в зависимости от типа используемого броузера), который создает тэг OBJECT или EMBED для Java plugin
page jsp:include Подключение файла в момент запроса страницы
page jsp:forward Перенаправление запроса на другую страницу
value jsp:setProperty Установка свойств компонента JavaBean
value jsp:getProperty Чтение свойств компонента JavaBean в выходной поток
value jsp:param Определение значения параметры для компонента, размещаемого на странице JSP

Действие jsp:useBean

Тег jsp:useBean позволяет ассоциировать экземпляр Java-класса, определенный в данной области видимости scope, с заданным внутренним идентификатором этого класса id в данной странице JSP. Прежде, чем использовать свойства компонента JavaBean (setProperty getProperty), необходимо объявить тег jsp:useBean. При выполнении тега jsp:useBean сервер приложений обеспечивает поиск (lookup) экземпляра данного Java-класса, пользуясь значениями, определенными в атрибутах:

  • id - идентификатор экземпляра класса внутри страницы JSP;
  • scope - область видимости (page, request, session, application).

Если объект с данными атрибутами id, scope не найден, предпринимается попытка создать объект, используя значения, определенные в его атрибутах. Синтаксис действия jsp:useBean может включать тело :

<jsp:useBean id="идентификатор" 
    scope = "page | request | session | application" 
    class = "имяКласса" type = "имяТипа" | 
    type = "имяТипа" | class = "имяКласса" | 
    beanName = "имяКомпонентаJavaBean" | type = "имяТипа" | 
    type = "имяТипа" | beanName = "имяКомпонентаJavaBean" |  
    type = "имяТипа"> 
    <!-- Тело -->
    </jsp:useBean>

При наличии в объявление тела, оно будет вызвано на выполнение, если компонент JavaBean, к которому обращено действие, уже существует. Содержимое тела действия строго не ограничено, однако, как правило, тело действия содержит скриптлеты или теги jsp:setProperty, модифицирующие свойства созданного объекта.

Действие jsp:useBean очень гибкое. Правила, по которым оно выполняется, зависят от текущих значений его атрибутов. С помощью действия jsp:useBean можно:

  • найти существующий компонент JavaBean. Если объект найден, то он доступен, например, из объекта ServletRequest, определенного для страницы с помощью метода getAttribute(name);
  • создать новый экземпляр класса JavaBean - создается новая переменная на языке скрипта с именем, определяемым параметром id, и в области видимости, заданной параметром scope;
  • используя атрибут type, задать локальное имя объекту, определенном в другой странице JSP или сервлете (атрибуты class или beanName при этом не используются).

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

АтрибутОписание атрибута
id Параметр, идентифицирующий экземпляр объекта в пространстве имен, специфицированном в атрибуте scope. Это имя используется для ссылки на компонент JavaBean из страницы JSP.
scope Атрибут, определяющий область видимости ссылки на экземпляр объекта JavaBean. Допустимыми значениями являются page, request, session, application. Данный атрибут фактически описывает пространство имен и цикл жизни ссылки на объект. По умолчанию значение объекта равно page.

page (страница). Объект, определенный с областью видимости page, доступен до тех пор, пока не будет отправлен ответ клиенту или пока запрос к текущей странице JSP не будет перенаправлен куда-нибудь еще. Ссылки на объект возможны только в пределах страницы, в которой этот объект определен. Объекты, объявленные с атрибутом page, сохраняются в объекте pageContext.

request (запрос). Объект, имеющий область видимости request, существует и доступен в течение текущего запроса, и остается видимым, даже если запрос перенаправляется другому ресурсу в том же самом цикле выполнения. Объекты, декларированные с атрибутом области видимости request, сохраняются в объекте request.

session (сессия). Объект, имеющий область видимости session доступен в течение текущего сеанса, если страница JSP "знает" о сеансе.

application (приложение). Объект, имеющий область видимости application доступен страницам, обрабатывающим запросы в одном и том же приложении Web, и cуществует до тех пор, пока сервер приложений поддерживает объект ServletContext. Объекты, объявленные с атрибутом области видимости application, сохраняются в объекте application.
class Параметр, определяющий полное имя класса реализации объекта. Данный атрибут используется при инициализации экземпляра компонента JavaBean, если он еще не существует в данной области видимости scope.
beanName Наименование класса реализации объекта. Данный параметр используется, если компонент JavaBean еще не существует. Параметр beanName должен удовлетворять правилам наименования переменных, предусмотренным спецификацией языка скриптлетов. Формат параметра : "строка1.строка2.строка3" - для классов и "строка1 / строка2 / строка3" - для ресурсов. Параметр beanName предполагает использование метода instantiate () класса java.beans.Beans.
type Атрибут type, определяющий тип специфицированного объекта, дает возможность определить тип переменных скрипта как класс, суперкласс или интерфейс, реализуемый классом. С помощью атрибута type можно избежать автоматической инициализации компонента JavaBean, если он еще не существует в данной области видимости. По умолчанию атрибут type имеет значение, определенное в атрибуте class. Если объект не соответствует даваемому атрибутом type типу, может быть возбуждено исключение java.lang.ClassCastException.

Если имя класса (class) и имя объекта (beanName) не определены, объект должен быть представлен в заданной области видимости. Значение идентификатора id должно быть уникально в текущем модуле трансляции (JSP-странице), иначе возникает ошибка трансляции.

Действие jsp:setProperty

Тег jsp:setProperty позволяет присваивать значения свойствам компонента JavaBean, который должен быть предварительно создан действием jsp:useBean и содержать соответствующие свойства. Действие jsp:setProperty имеет следующий синтаксис :

<jsp:setProperty name="идентификатор" 
    property = "*" | 
    property = "имяСвойства" | 
    property = "имяСвойства" | param = "имяПараметра" | 
    property = "имяСвойства" | value = "значение" 
/>
АтрибутОписание атрибута
name Параметр, идентифицирующий экземпляр объекта JavaBean, предварительно определенный в теге jsp:useBean, свойство которого устанавливаются текущим тегом jsp:setProperty
property Имя свойства, которому необходимо определить значение. Если используется символ "*", то предполагается автоматическая установка значений свойств. В последнем случае соответствующие элементы формы должны иметь имена, совпадающие с именами устанавливаемых свойств компонента JavaBean. В этом случае по именам элементов формы осуществляется поиск (look up) соответствующих свойств компонента JavaBean с последующей установкой их значений
param Имя параметра запроса, который передается свойству компонента JavaBean. Параметры запроса, как правило, ссылаются на соответствующие элементы HTML-страницы. Этот атрибут не может использоваться одновременно с атрибутом value
value Новое значение устанавливаемого свойства

Значения свойств компонента JavaBean устанавливается с учетом соответствия типов значения и свойства. Тег jsp:setProperty позволяет устанавливать значения как простых, так и индексированных ствойств. Свойства компонента JavaBean имеют определенный тип, а также методы setter и getter. При установке параметров обычно проверяются наличия свойств компонента JavaBean, их имена и типы, являются ли свойства простыми или индексированными и т.д.

Значения одного или нескольких свойств компонента JavaBean могут быть установлены несколькими способами:

  • с помощью параметров объектов типа request (запрос);
  • с использованием строковой константы;
  • с помощью выражения, вычисляемого во время запроса.

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

<jsp:useBean id="user" class="hall.users" />
<jsp:setProperty name="user" property="name" value="alex" />
<jsp:setProperty name="user" property="name" value="serg" />

Действие jsp:getProperty

После объявления компонента JavaBean с помощью действия jsp:useBean его незащищенные свойств становятся доступными для действия jsp:getProperty. Тег jsp:getProperty делает свойства компонента JavaBean видимыми. Данный тег включает значение типа String или объект типа, преобразованный к типу String, в выходной поток. Преобразование простых типов в тип String происходит автоматически. Для объектов необходим вызов метода toString().

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

<jsp:getProperty name="идентификатор" 
    property = "имяСвойства"  
/>

Тег jsp:getProperty имеет ряд атрибутов, которые представлены в таблице. При записи тега допускается использовать не все возможные атрибуты.

АтрибутОписание атрибута
name Параметр, идентифицирующий экземпляр объекта JavaBean, предварительно определенный в теге jsp:useBean
property Имя свойства, значение которого необходимо получить

Значения атрибутов в тегах jsp:setProperty и jsp:getProperty ссылаются на объект, который получается из объекта pageContext с помощью метода findAttribute().

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

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

Действие jsp:include

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

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

Действие 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 Атрибут page определяется относительно текущей страницы JSP. Включаемая страница имеет доступ только к объекту JspWriter и не может устанавливать заголовки
flush Необязательный атрибут flush управляет переполнением. Если этот атрибут имеет значение true и выходной поток страницы JSP буферизуется, то буфер освобождается при переполнении, в противном случае - не освобождается. По умолчанию значение атрибута flush равно false

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

Действие jsp:forward

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

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, которые предоставляют значения для некоторых параметров запроса, используемые для перенаправления.

Действие jsp:plugin

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

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

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

Действие 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 поставщика.

Действие jsp:param

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

  • jsp:include
  • jsp:forward
  • jsp:plugin
  • jsp:params

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

Действие 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>
  Рейтинг@Mail.ru