English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Действующие элементы JSP

В отличие от элементов директив JSP, элементы действий JSP действуют на этапе обработки запроса. Элементы действий JSP написаны на XML-синтаксисе.

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

Элементы действий имеют только один синтаксис, который соответствует стандартам XML:

<jsp:action_name attribute="value" />

Элементы действий в основном являются предварительно определенными функциями, спецификация JSP определяет ряд стандартных действий, которые начинаются с префикса JSP, доступные стандартные элементы действий:

ГрамматикаОписание
jsp:includeВключает файл при запросе страницы.
jsp:useBeanИщет или создает JavaBean.
jsp:setPropertyУстанавливает свойства JavaBean.
jsp:getPropertyВывод свойств JavaBean.
jsp:forwardПеренаправляет запрос на новую страницу.
jsp:pluginГенерирует OBJECT или EMBED тег в зависимости от типа браузера для Java-плагина.
jsp:elementОпределяет динамический XML-элемент
jsp:attributeУстанавливает атрибуты динамически определенного XML-элемента.
jsp:bodyУстанавливает содержимое динамически определенного XML-элемента.
jsp:textШаблон записи текста в JSP-странице и документе

Общие свойства

Все элементы действий имеют два атрибута: атрибут id и атрибут scope.

  • Атрибут id:

    Атрибут id является уникальным идентификатором элемента действия и может быть использован для ссылки на JSP-странице. Значение id, созданного элементом действия, можно вызвать через PageContext.

  • Атрибут scope:

    Этот атрибут используется для идентификации жизненного цикла элемента действия. Атрибут id и атрибут scope связаны между собой, атрибут scope определяет продолжительность жизни связанного с id объекта. Атрибут scope имеет четыре возможных значения: (a) page, (b) request, (c) session и (d) application.

Элемент действия <jsp:include>

Элемент действия <jsp:include> используется для включения статических и динамических файлов. Это действие вставляет указанный файл в генерируемую страницу. Грамматический формат следующий:

<jsp:include page="относительный URL-адрес" flush="true" />

 Ранее уже было рассказано о директиве include, которая добавляет файл в процессе преобразования JSP-файла в Servlet, whereas jsp:include действие добавляет файл в момент запроса страницы.

Ниже приведен список свойств, связанных с действием include.

АтрибутОписание
pageотносительный URL-адрес, включаемый в страницу.
flushбулево свойство, определяющее, следует ли обновлять буфер перед включением ресурса.

Онлайн пример

Ниже мы определяем два файла date.jsp и main.jspКод如下所示:

Код файла date.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
    pageEncoding="UTF-8"%>
<p>
   Сегодняшняя дата: <%= (new java.util.Date()).toLocaleString() %>
</p>

Код файла main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Сайт базового руководства (oldtoolbag.com)</title>
</head>
<body>
<h2>include пример действия</h2>
<jsp:include page="date.jsp" flush="true" />
</body>
</html>

Теперь поместите эти два файла в корневую директорию сервера и откройте файл main.jsp. Результат будет следующим:

include пример действия
Сегодняшняя дата: 2016-6-25 14:08:17

Элемент действия <jsp:useBean>

jsp:useBean Действие используется для загрузки JavaBean, который будет использоваться на странице JSP.

Эта функция очень полезна, так как позволяет нам использовать преимущества повторного использования Java-компонентов.

Самый простой синтаксис действия jsp:useBean:

<jsp:useBean id="name" />

После загрузки класса мы можем изменять и извлекать свойства bean с помощью действий jsp:setProperty и jsp:getProperty.

Ниже приведен список атрибутов, связанных с действием useBean.

АтрибутОписание
classУказывается полный пакет Bean.
typeУказывается тип, к которому будет относиться переменная объекта.
beanNameС помощью метода instantiate() класса java.beans.Beans указывается имя Bean.

До того, как предоставить конкретные примеры, давайте сначала рассмотрим элементы действий jsp:setProperty и jsp:getProperty:

Элемент действия <jsp:setProperty>

jsp:setProperty используется для установки свойств уже примеренного объекта Bean, и имеет два способа использования. Сначала вы можете использовать jsp:setProperty снаружи (за) элемента jsp:useBean, как показано ниже:

<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>

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

<jsp:useBean id="myName" ... >
...
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

В этом случае, jsp:setProperty выполняется только при создании нового экземпляра Bean, если используется существующий экземпляр, jsp:setProperty не выполняется.

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

АтрибутОписание
nameАтрибут name обязателен. Он указывает, какой Bean нужно установить.
propertyАтрибут property обязателен. Он указывает,哪个 атрибут нужно установить. Есть особое использование: если значение property равно "*", это означает, что все параметры запроса, имена и имена свойств Bean, соответствующие именам, будут переданы соответствующему методу set свойств.
valueАтрибут value является опциональным. Этот атрибут используется для указания значения свойства Bean. Строковые данные автоматически преобразуются в числа, boolean, Boolean, byte, Byte, char, Character через стандартный метод valueOf в целевом классе. Например, значения свойств типа boolean и Boolean (например, "true") преобразуются с помощью Boolean.valueOf, значения свойств типа int и Integer (например, "42") преобразуются с помощью Integer.valueOf.   value и param не могут использоваться одновременно, но можно использовать один из них.
paramparam является опциональным. Он указывает,哪个 параметр запроса используется в качестве значения свойства Bean. Если в текущем запросе нет параметров, ничего не происходит, система не передает null методу set свойства Bean. Таким образом, вы можете позволить Bean предоставлять значение по умолчанию, которое будет изменено только в том случае, если в запросе явно указано новое значение.

Элемент действия jsp:getProperty

Действие jsp:getProperty извлекает значение свойства указанного Bean, преобразует его в строку и выводит. Формат синтаксиса следующий:

<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

В таблице ниже приведены свойства, связанные с getProperty:

АтрибутОписание
nameНазвание Bean属性, которую нужно извлечь. Bean должен быть уже определен.
property表示要提取Bean属性的值

Онлайн пример

В следующем примере мы используем Bean:

package com.w3codebox.main;
public class TestBean {
   private String message = "基础教程网";
 
   public String getMessage() {
      return(message);
   }
   public void setMessage(String message) {
      this.message = message;
   }
}

Компилируйте пример файла TestBean.java:

$javac TestBean.java

После компиляции в текущей директории будет создан один TestBean.class файл Копируйте этот файл в текущий проект JSP WebContent/WEB-INF/classes/com/w3codebox/mainВнизу (папка com/w3codebox/main, не нужно создавать вручную).

Ниже приведена структура каталогов в Eclipse:

Ниже приведен очень простой пример, который загружает Bean и устанавливает/читает его атрибут message.

Теперь давайте вызовем этот Bean в файле main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Сайт базового руководства (oldtoolbag.com)</title>
</head>
<body>
<h2>Пример использования JavaBean в JSP</h2>
<jsp:useBean id="test" />
 
<jsp:setProperty name="test" 
                    property="message" 
                    value="Основной учебник..." />
 
<p>Отображаемая информация....</p>
 
<jsp:getProperty name="test" property="message" />
</body>
</html>

При посещении браузером, выполнении этих файлов, результат будет следующим:

Элемент действия <jsp:forward>

 Действие jsp:forward перенаправляет запрос на другую страницу. Единственный атрибут тега jsp:forward - это page. Грамматический формат приведен ниже:

<jsp:forward page="относительный URL адрес" />

Ниже приведены атрибуты, связанные с forward:

АтрибутОписание
pageАтрибут page содержит относительный URL. Значение page может быть указано напрямую или вычислено динамически в момент запроса, это может быть страница JSP или Java Servlet.

Онлайн пример

В данном примере мы используем два файла: date.jsp и main.jsp.

Код файла date.jsp следующий:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
    pageEncoding="UTF-8"%>
<p>
   Сегодняшняя дата: <%= (new java.util.Date()).toLocaleString() %>
</p>

Код файла main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Сайт базового руководства (oldtoolbag.com)</title>
</head>
<body>
<h2>Пример действия forward</h2>
<jsp:forward page="date.jsp" />
</body>
</html>

Теперь поместите эти два файла в корневую директорию сервера и откройте файл main.jsp. Результат будет следующим:

Сегодняшняя дата: 2016-6-25 14:37:25

Элемент действия <jsp:plugin>

Действие jsp:plugin предназначено для вставки в зависимости от типа браузера необходимых элементов OBJECT или EMBED для выполнения Java Applet через Java-плагин.

Если необходимый плагин отсутствует, он загрузит плагин, а затем выполнит компонент Java. Компонент Java может быть applet или JavaBean.

У элемента действия <plugin> есть несколько свойств, соответствующих HTML-элементам, которые используются для форматирования Java-компонентов. Элемент <param> можно использовать для передачи параметров Applet или Bean.

Ниже приведен пример использования элемента действия <plugin>:

<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
                           width="60" height="80">
   <jsp:param name="fontcolor" value="red" />
   <jsp:param name="background" value="black" />
 
   <jsp:fallback>
      Unable to initialize Java Plugin
   </jsp:fallback>
 
</jsp:plugin>

Если вы хотите попробовать использовать applet для тестирования элемента действия <jsp:plugin>, элемент <fallback> является новым элементом, который отправляет пользователю ошибочную информацию при возникновении ошибки в компоненте.

<jsp:element> 、 <jsp:attribute> 、 Элемент действия <jsp:body>

<jsp:element> 、 <jsp:attribute> 、 Элемент действия <jsp:body> динамически определяет XML-элемент. Динамичность очень важна, что означает, что XML-элемент генерируется динамически, а не статически.

Ниже приведен пример динамического определения XML-элемента:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Сайт базового руководства (oldtoolbag.com)</title>
</head>
<body>
<jsp:element name="xmlElement">
<jsp:attribute name="xmlElementAttr">
   Значение атрибута
</jsp:attribute>
<jsp:body>
   Содержимое элемента XML
</jsp:body>
</jsp:element>
</body>
</html>

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


Элемент действия <jsp:text>

Элемент действия <jsp:text> позволяет использовать шаблоны для записи текста на странице JSP и в документе, синтаксис которых следующий:

<jsp:text>данные шаблона</jsp:text>

Этот текстовый шаблон не должен содержать повторяющиеся элементы, он может содержать только текст и EL-выражения (Примечание: EL-выражения будут рассмотрены в后续 главах). Обратите внимание, что в файлах XML вы не можете использовать выражения, такие как ${whatever > 0}, так как символ > является非法ным. Вы можете использовать выражение ${whatever gt 0} или嵌入 в частьCDATA значения.

<jsp:text><![CDATA[<br>]]></jsp:text>

Если вам нужно объявить DOCTYPE в XHTML, вам нужно использовать действие <jsp:text>, пример приведен ниже:

<jsp:text><![CDATA[<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">]]>
</jsp:text>
<head><title>jsp:text action</title></head>
<body>
<books><book><jsp:text>  
    Добро пожаловать в программирование на JSP
</jsp:text></book></books>
</body>
</html>

Вы можете попробовать использовать <jsp:text> и сравнить результаты без использования этого действия.