JavaServer Pages (JSP) позволяют вам отделить
динамическую часть ваших страниц от
статического HTML. Вы, как обычно, пишете
обычный код в HTML, используя для этого любую
программу для создания Web страниц. Затем вы
заключаете динамическую часть кода в
специальные таги, большинство которых
начинаются с "<%" и завершаются "%>".
В качестве примера рассмотрим секцию JSP
страницы, результатом которой будет что-то
вроде "Спасибо за покупку Core Web Programming" по
запросу с URL:
http://host/OrderConfirmation.jsp?title=Core+Web+Programming:
Спасибо за покупку
<I><%= request.getParameter("title") %></I>
Вы даете вашему файлу расширение .jsp и
размещаете там же, где должны размещаться
обычные Web страницы. Хотя то что вы написали
больше похоже на обычный HTML файл чем на
сервлет, просто за кадром JSP страница
преобразуется в обычный сервлет с
статическим HTML который просто направляется
в поток вывода, связанный с методом
сервлета service. Обычно это происходит
при первом запросе страницы, и разработчики
могут сразу после установки сами выполнить
этот запрос, если хотят чтобы первый
реальный пользователь при обращении к
странице не столкнулся с небольшой
задержкой, вызванной трансляцией JSP
страницы в сервлет и его последующей
компиляцией и загрузкой. Также отметим что
большинство Web серверов позволяет вам
задавать ссылки (aliases),
так что адрес URL, указывающий на HTML файл в
действительности будет указывать на
сервлет или страницу JSP.
Помимо
стандартных HTML конструкций существуют еще
три основных типа конструкций JSP, котрые вы
можете включить в страницу: элементы
скриптов, директивы и действия. Элементы
скриптов позволяют вам указать код на
языке Java, который впоследствии станет
частью в конечный сервлет, директивы
дадут вам возможность управлять всей
структурой сервлета, а действия служат
для задания существующих используемых
компонентов, а также для контроля поведением
движка JSP. Для упрощения
элементов скриптов, вы имеете доступ к нескольким
заранее определенным переменным, таким, например,
как переменная request, использованная
в приведенном выше отрывке.
Обратите
внимание что это руководство охватывает JSP
версии 1.0. А начиная с версии 0.92 JSP
претерпела множество изменений, и несмотря
на то что эти изменения были лишь во благо,
вы должны помнить что JSP версии 1.0
практически полностью не совместима с более
ранними JSP движками.
Также следует не забывать о том, что
предлагаемое вашему вниманию руководство
является частью более полного руководства
по сервлетам и JSP доступного по адресу http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/.
Файл в локальной системе, подключаемый
при трансляции JSP в сервлет.
Эквивалент на XML:
<jsp:directive.include
file="url"\>.
URL должен быть относительным .
Для подключения файла в процессе запроса
а не в ходе трансляции используйте
действие jsp:include.
Комментарий JSP
<%-- комментарий --%>
Комментарий; игнорируется при
трансляции JSP страницы в сервлет.
Если вы хотите чтобы комментарий
сохранился в конечном HTML, используйте
обычный синтаксис HTML для описания
комментариев: <-- комментарий -->.
Если вы хотите чтобы файл подключался в
процессе трансляции страницы,
используйте директиву page
совместно с атрибутом
include. Внимание: некоторые
сервера требуют чтобы подключаемые файлы
были в формате HTML или JSP, в зависимости от
настроек сервера (обычно данное
ограничение базируется на указании
расширений файлов).
Действие jsp:useBean
<jsp:useBean att=значение*/> or
<jsp:useBean att=значение*>
...
</jsp:useBean>
Как правило большую часть вашей JSP страницы
составляет статический HTML, называемый текстом
шаблона. Во всех отношениях (кроме одного)
этот HTML выглядит как обычный HTML,
использующий те же правила синтаксиса, и он
просто "передается" клиенту сервлетом,
создаваемым для обработки страницы. При
этом не только сам HTML выглядит
нормальным, он может создаваться с
применением тех инструментов, которые вы
ранее использовали при создании Web страниц.
Я, например, при создании большинства JSP
страниц для этого руководства использовал Allaire's HomeSite.
Единственным
печальным исключением из правила что "текст
шаблона передается в неизменном виде"
является ситуация, когда в тексте вы хотите
отобразить последовательность символов "<%",
для этого в тексте шаблона надо использовать
сочетание символов "<\%".
Элементы скриптов JSP позволяют вам
вставлять код на Java в сервлет, создаваемый
из текущей JSP страницы. Существуют три формы:
Выражения, имеющие форму <%= выражение %>,
которые обрабатываются и направляются
на вывод,
Скриплеты, имеющие форму <% код %>,
которые вставляются в метод service
сервлета
Объявления, имеющие форму <%! код %>,
которые вставляются в тело класса
сервлета, вне существующих методов.
Все они в отдельности будут подробно
рассмотрены далее.
4.1 Выражения JSP
Выражения JSP применяются для того чтобы
вставить значения Java непосредственно в
вывод. Для этого используется следующая
форма:
<%= Выражение на Java %>
Выражения Java вычисляются, конвертируются в
строку и вставляются в страницу. Эти
вычисления происходит во время выполнения (то
есть при при запросе страницы), а потому
существует полный доступ к информации о
самом запросе. Например, следующий код
служит для отображения даты и времени
запроса данной страницы:
Текущее время: <%= new java.util.Date() %>
Для того чтобы упростить эти выражения
существует несколько заранее определенных
переменных, которые вы можете использовать.
Более детально они будут рассмотрены ниже,
но тем не менее, рассматривая их применение
при использовании выражений, приведем
несколько наиболее важных:
request, HttpServletRequest; response, HttpServletResponse; session, HttpSession ассоциируется с запросом (если таковой имеется); out, PrintWriter
(буферизированный вариант типа JspWriter)
используется для отсылки выводимых
данных клиенту.
Пример:
Имя вашего хоста: <%= request.getRemoteHost() %>
И, наконец, авторы, использующие XML, могут
применить альтернативный синтаксис для
выражений JSP:
<jsp:expression>
Выражения на Java
</jsp:expression>
Помните, что элементы XML в отличие от HTML чувствительны
к регистру. Поэтому убедитесь в том, что
используете строчные символы.
4.2 Скриплеты JSP
Если вы хотите сделать что-то большее чем
вставка простых выражений, скриплеты JSP
дадут вам возможность вставить любой код в
метод сервлета, который будет создан при
обработке данной страницы. Скриплеты имеют
следующий вид:
<% Код на Java %>
Скриплеты также имеют доступ к тем же
автоматически определенным переменным, что
и выражения. Поэтому, например, если вы
хотите вывести что-нибудь на страницу, вы должны
воспользоваться переменной out.
Обратите внимание на то, что код внутри
скриплета вставляется в том виде, как он
записан, и весь статический HTML (текст
шаблона) до или после скриплета
конвертируется при помощи оператора print.
Это означает что скриплеты не обязательно
должны содержать завершенные фрагменты на Java,
и что оставленные открытыми блоки могут оказать
влияние на статический HTML вне скриплета. Например, следующий фрагмент JSP
содержит смешанный текст шаблона и
скриплеты:
Если вы хотите использовать последовательность
символов "%>" внутри скриплета,
вместо нее используйте "%\>".
Эквивалентом <% Код %>
для XML является:
<jsp:scriptlet>
Код
</jsp:scriptlet>
4.3 Объявления JSP
Объявления JSP позволят вам задать
методы или поля, для вставки в тело класса
сервлета (вне метода service,
обрабатывающего запрос). Они имеют
следующую форму:
<%! Код на Java %>
Поскольку объявления не осуществляют
вывода, обычно они используются совместно с
JSP выражениями или скриплетами. В
приведенном в качестве примера фрагменте JSP
отображается количество запросов к данной
странице с момента загрузки сервера (или с
момента последнего изменения и
перезагрузки сервлета):
<%! private int accessCount = 0; %>
Количество обращений к странице с момента загрузки сервера:
<%= ++accessCount %>
Также как и в скриплетах, если вам
необходимо использовать
последовательность символов "%>",
используйте для этого последовательность "%\>". XML
эквивалентом <%! Код %>
является
Существуют два основных типа директив: page,
которая позволяет вам совершать такие
операции, как импорт классов, изменение
суперкласса сервлета, и т.п.; и include,
которая дает вам возможность вставить файл
в класс сервлета при трансляции JSP файла в
сервлет. Также следует упомянуть директиву taglib,
которая не поддерживается в JSP версии 1.0, но
позволяет авторам JSP задавать свои
собственные тэги. Предполагается что эта
директива станет основной особенностью JSP 1.1.
5.1 Директива JSP page
Директива page позволяет вам задать
один и более следующих чувствительных
к регистру атрибутов:
import="пакет.class" или import="пакет.class1,...,пакет.classN".
Позволяет вам задать пакеты, которые
должны быть импортированы. Например: <%@ page import="java.util.*" %>
Атрибут import - единственный
атрибут, допускающий многократное
применение.
contentType="MIME-Тип" или contentType="MIME-Тип; charset=Кодировка-Символов"
Задает тип MIME для вывода. По умолчанию
используется text/html. К примеру,
директива
<%@ page contentType="text/plain" %>
приводит к тому же результату, что и
использование скриплета
<% response.setContentType("text/plain"); %>
isThreadSafe="true|false". Значение
true ("истина", принимается по
умолчанию) задает нормальный режим
выполнения сервлета, когда множественные
запросы обрабатываются одновременно с
использованием одного экземпляра
сервлета, исходя из соображения что автор
синхронизировал доступ к переменным
этого экземпляра. Значение false
("ложь") сигнализирует о том, что
сервлет должен наследовать SingleThreadModel
(однопоточную модель) при которой
последовательные или одновременные
запросы обрабатываются отдельными
экземплярами сервлета.
session="true|false". Значение true
("истина", принимается по умолчанию)
сигнализирует о том, что заранее
определенная переменная session (тип HttpSession)
должна быть привязана к существующей
сессии, если таковая имеется, в противном
случае создается новая сессия, к которой
и осуществляется привязка. Значение false
("ложь") определяет что сессии не
будут использоваться, и попытки
обращения к переменной session
приведут к возникновению ошибки при
трансляции JSP страницы в сервлет.
buffer="размерkb|none". Задает
размер буфера для JspWriterout.
Значение принимаемое по умолчанию
зависит от настроек сервера, но должно
превышать 8kb.
autoflush="true|false". Значение true
("истина", принимаемое по умолчанию)
устанавливает что при переполнении буфер
должен автоматически очищаться. Значение false
("ложь"), которое крайне редко
используется, устанавливает что
переполнение буфера должно приводить к
возникновению исключительной ситуации.
При установке значение атрибута buffer="none"
установка значения false для этого
атрибута недопустимо.
extends="пакет.class". Задает
суперкласс для генерируемого сервлета.
Этот атрибут следует использовать с
большой осторожностью, поскольку
возможно что сервер уже использует какой-нибудь
суперкласс.
info="сообщение". Задает
строку, которая может быть получена при
использовании метода getServletInfo.
errorPage="url". Задает JSP страницу,
которая вызывается в случае
возникновения каких-либо событий Throwables,
которые не обрабатываются на данной
странице.
isErrorPage="true|false". Сигнализирует о
том, может ли эта страница использоваться
для обработки ошибок для других JSP
страниц. По умолчанию принимается
значение false ("ложь").
language="java". Данный атрибут
предназначен для задания используемого
языка программирования. По умолчанию
принимается значение "java",
поскольку на сегодняшний день это
единственный поддерживаемый язык
программирования.
Эта директива позволяет вам включать файлы
в процессе трансляции JSP страницы в сервлет.
Использование директивы выглядит
следующим образом:
<%@ include file="относительный url" %>
Заданный URL обычно интерпретируется
относительно JSP страницы, на которой
расположена ссылка, но, как и при
использовании любых других относительных
URL вы можете задать системе положение
интересующего вас ресурса относительно
домашнего каталога Web сервера, добавив в
начало URL символ "/". Содержимое
подключаемого файла обрабатывается как
обычный текст JSP и поэтому может включать
такие элементы как статический HTML, элементы
скриптов, директивы и действия.
Например,
многие сайты используют небольшую панель
навигации на каждой странице. В связи с
проблемами использования фреймов HTML часто
эта задача решается размещением небольшой
таблицы сверху или в левой половине
страницы, HTML код которой многократно
повторяется для каждой страницы сайта.
Директива include
наиболее естественный способ решения этой
задачи, избавляющий разработчика от
кошмара рутины копирования HTML в каждый
отдельный файл. Это происходит следующим
образом:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Руководство по сервлетам: JavaServer Pages (JSP) 1.0</TITLE>
<META NAME="author" CONTENT="webmaster@somesite.com">
<META NAME="keywords" CONTENT="...">
<META NAME="description" CONTENT="...">
<LINK REL=STYLESHEET
HREF="Site-Styles.css"
TYPE="text/css">
</HEAD>
<BODY>
<%@ include file="/navbar.html" %>
<!-- Специфический фрагмент этой страницы ... -->
</BODY>
</HTML>
Учтите что поскольку директива include
подключает файлы в ходе трансляции
страницы, то после внесения изменений в
панель навигации вам потребуется повторная
трансляция всех использующих ее JSP страниц.
Что в данном случае является хорошим
компромиссом, поскольку как правило панель
навигации меняется достаточно редко и
процесс подключения не теряет своей
эфективности. Если же подключенные файлы
меняются довольно часто, вы можете
использовать вместо этого действие jsp:include.
Это действие подключает файл в процессе
обращения к JSP странице и более подробно
рассмотрено в разделе "Действия
JSP" данного руководства.
Для упрощения кода в выражениях JSP и
скриплетах, вам предоставлен набор их
восьми автоматически определенных
переменных, иногда называемых неявными
объектами. Доступные переменные это request, response,
out, session, application,
config, pageContext иpage. Далее мы рассмотрим каждую из них
в отдельности
7.1 request
Это объект HttpServletRequest, связанный с
запросом, который позволяет вам обращаться
к параметрам запроса (через метод getParameter),
типу запроса (GET, POST, HEAD,
и т.д..), и входящим HTTP заголовкам (cookies, Referer,
и т.д..). Проще говоря, request является
подклассом ServletRequest и может
отличаться от HttpServletRequest если
используется протокол отличный от HTTP, что
на практике практически никогда не
встречается.
7.2 response
Это объект типа HttpServletResponse,
связанный с ответом на запрос клиента.
Обратите внимание что, поскольку поток
вывода (см. out далее) буферизован, можно
изменять коды состояния HTTP и заголовки
ответов, даже если это недопустимо в
обычном сервлете, но лишь в том случае если
какие-то данные вывода уже были отправлены
клиенту.
7.3 out
Это объект типа PrintWriter, используемый
для отправки вывода клиенту. Однако, чтобы
сделать объект response (см. предыдущий
раздел) полезным, следует использовать
буферизированный вариант PrintWriter - JspWriter.
Помните что вы можете изменять размер
буфера и даже отключить буферизацию,
изменяя значение атрибута buffer
директивы
page. Этот вопрос подробно рассмотрен
в Разделе 5. Также обратите
внимание что out используется
практически исключительно скриплетами,
поскольку выражения JSP автоматически
помещаются в поток вывода, что избавляет от
необходимости явного обращения к out.
7.4 session
Это объект типа HttpSession, связанный с
запросом. Сессии создаются автоматически, и
эта переменная существует даже если нет
ссылок на входящие сессии. Единственным
исключением является ситуация, когда вы
отключаете использование сессий используя
атрибут session директивы page (см.
Раздел 5). В этом случае ссылки
на переменную session приводят к
возникновению ошибок при трансляции JSP
страницы в сервлет.
7.5 application
Это объект типа ServletContext полученный
через использование метода getServletConfig().getContext().
7.6 config
Это объект типа ServletConfig для текущей
страницы.
7.7 pageContext
В JSP представлен новый класс PageContext
для изолированного использования
специфических особенностей сервера, таких
как более эффективные JspWriters. Идея
заключается в том, что если вы обращаетесь к
ним через этот класс а не
непосредственно, ваш код может исполняться
на "обычных" движках
сервлет/JSP.
7.8 page
По сути является синонимом для this, и
не нужен при работе с Java. Эта переменная
создавалась с расчетом на перспективу,
когда возможно появятся другие языки
программированя скриптов, отличные от Java.
Действия
JSP используют конструкции с синтаксисом XML
для управления работой движка
сервлета. Вы можете динамически подключать
файл, многократно использовать компоненты JavaBeans,
направить пользователя на другую страницу
или сгенерировать HTML для Java plugin.
Допустимо применение следующих действий:
jsp:include - Подключает файл в момент
запроса страницы. См. Раздел 8.1.
jsp:useBean - Поиск или создание нового
экземпляра JavaBean. См. Раздел 8.2 для
обзора и Раздел 8.3 для
детального рассмотрения.
jsp:setProperty - Установка приоритетов
JavaBean. См. Раздел 8.4.
jsp:getProperty - Вставить свойство JavaBean
в поток вывода. См. Раздел 8.5.
jsp:forward - Перенаправляет запрос на
другую страницу. См. Раздел 8.6.
jsp:plugin - Генерирует код (в
зависимости от типа используемого
броузера), который создает тэг OBJECT
или EMBED для Java
plugin. См. Раздел 8.7.
Все эти действия детально рассмотрены
далее. Помните что как и во всем
XML, имена элементов и атрибутов регистрозависимы.
В отличие от директивы include,
которая вставляет файл на этапе трансляции JSP
страницы, это действие вставляет файл при
запросе страницы. Это приводит к некоторой
отере эффективности и исключает
возможность наличия во вставляемом файле
кода JSP (например, вам не удастся задать
заголовки HTTP), но зато дает существенное
преимущество в гибкости. Возьмем, к примеру,
JSP страницу, которая вставляет четыре
различных отрывка в Web страницу с новостями
сайта. Каждый раз когда меняются заголовки
автору достаточно изменить содержимое
четырех файлов, тогда как главная JSP
страница остается неизменной.
Это действие позволяет вам загружать JavaBean
для последующего использования на JSP
странице. Это очень важная возможность,
поскольку она позволяет вам использовать многократного
использования классов Java не отказываясь
при этом от преимуществ, предоставляемых
сервлетами JSP. Простейший синтаксис для
указания используемого bean:
<jsp:useBean id="имя" class="пакет.class" />
Как правило это означает "создание
нового экземпляра объект класса, заданного через class, и
его связь с переменной с именем, заданным
при помощи id." Однако, как вы скоро
убедитесь, можно задать атрибут scope
который ассоциирует bean не только с текущей
страницей. В таком случае, полезно получить
ссылки на существующие beans, и действие jsp:useBean
создает экземпляр нового объекта лишь в том случае если не существует
ни одного объекта с теми же значениями id
и scope. Теперь, когда у вас есть bean, вы
можете изменять его свойства при помощи jsp:setProperty,
или используя для этого скриплет и явно
вызывая метод объекта с именем переменной заданном
ранее через атрибут id. Recall that with
beans, когда вы говорите "у этого bean есть
свойство типаX с названием
foo", вы на самом деле имеете ввиду "у
этого класса есть метод getFoo, который
возвращает данные типа X, и другой метод setFoo,
которому в качестве параметра передается X."
Действие jsp:setProperty более подробно
рассмотрено в следующем разделе, но сейчас
вы должны запомнить что вы можете либо явно
задавать value, задавая атрибут param,
чтобы получить значение из
соответствующего параметра запроса, или
просто перечислить свойства, чтобы
получить значения из параметров запроса с
теми же именами что и свойства. Вы можете
получить значения существующих свойств при
помощи выражений JSP или скриплетов, вызвав
соответствующий метод getXxx, или (чаще
всего), воспользовавшись действием jsp:getProperty.
Помните
что класс заданный для bean должен находиться
в обычном каталоге классов сервера, а не
в части, зарезервированной для классов,
автоматически пеезагружаемых после
редактирования. Например, для Java Web Server, все
используемые классы должны размещаться в
каталоге classes или в jar файле каталога lib,
а не в каталоге servlets.
Ниже приведен очень простой пример,
загружающий bean и
устанавливающий/получающий простой
строковый параметр.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Многократное использование JavaBeans в JSP</TITLE>
<LINK REL=STYLESHEET
HREF="My-Style-Sheet.css"
TYPE="text/css">
</HEAD>
<BODY>
<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
Многократное использование JavaBeans в JSP</TABLE>
</CENTER>
<P>
<jsp:useBean id="test" class="hall.SimpleBean" />
<jsp:setProperty name="test"
property="message"
value="Привет, WWW" />
<H1>Сообщение: <I>
<jsp:getProperty name="test" property="message" />
</I></H1>
</BODY>
</HTML>
SimpleBean.java
Здесь приведен исходный код для bean,
исппользованного на JSP странице BeanTest. Вы
можете также скачать
исходники файла.
package hall;
public class SimpleBean {
private String message = "Текст сообщения не задан";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
Простейший способ использовать bean
- это использование конструкции <jsp:useBean id="имя" class="пакет.class" />
для загрузки bean,
а затем использовать jsp:setProperty и jsp:getProperty
для модификации и получения его свойств.
Однако существуют еще два других способа.
Во-первых, вы можете использовать формат
контейнера, а именно: <jsp:useBean ...>
Тело
</jsp:useBean>
для того чтобы обеспечить выполнение Тела
только в том случае, если экземпляр bean
создается впервые, а не тогда, когда находится
и используется уже существующий bean. Как
обсуждается далее, beans
могут совместно использоваться, поэтому не
каждое выражение jsp:useBean приводит к
созданию экземпляра нового bean.
Во-вторых, кроме id и class,
существуют еще три других атрибута, которые
вы можете использовать: scope, type,
и beanName. Эти атрибуты описаны в
следующей таблице.
Атрибут
Применение
id
Дает имя переменной, которая ссылается
на bean. Если
удается найти bean с теми же самыми
значениями id и scope, то
вместо создания нового экземпляра используется ранее созданный
объект.
class
Задает полное имя пакета bean.
scope
Задает область, в которой bean должен быть
доступен. Может принимать четыре
допустимых значения: page,
request, session и application.
По умолчанию принимает значение page,
означающее что bean доступен только на
текущей странице (размещается в PageContext
текущей страницы). Значение request
означает что bean доступен только для текущего
запроса клиента (размещается в объекте ServletRequest).
Значение session означает что объект
доступен всем страницам на протяжении жизни
текущей HttpSession. И, наконец,
значение application означает что он
доступен всем страницам, использующим
тот же самый ServletContext. Причина
необходимости этого атрибута
заключается в том что jsp:useBean
приводит к созданию нового экземпляра
объекта в том случае, если нет
уже существующего объекта с тем же id
и scope. Иначе используется уже
существующий объект, и все элементы jsp:setParameter
или любые другие между тэгами jsp:useBean
игнорируются.
type
Указывает тип переменной, которая
ссылается на объект. Долже совпадать с
именем класса, суперкласса или
реализуемого интерфейса. Запомните что имя
переменной задается через атрибут id.
beanName
Дает имя bean,
которое будет использовано методом instantiate.
Можно задать type и beanName, и
опустить атрибут class.
Вы можете использовать jsp:setProperty для
присвоения значений свойствам ранее
описанных beans. Вы
можете делать это двумя способами. Во-первых,
вы можете использовать jsp:setProperty
после, но вне элемента jsp:useBean, так как
это показано в примере:
В этом случае jsp:setProperty выполняется
независимо от того, был ли найден
существующий bean или
был создан новый экземпляр. Другим вариантом заключается в
размещении jsp:setProperty в теле элемента jsp:useBean,
как это показано в другом примере:
При этом jsp:setProperty выполняется лишь в
том случае, если был создан новый экземпляр объекта,
а не тогда, когда находится уже
существующий.
Действие jsp:setProperty допускает
применение следующих четырех атрибутов:
Атрибут
Применение
name
Этот обязательный атрибут служит для
задания bean,
свойства которого будут устанавливаться.
Элемент jsp:useBean должен
предшествовать использованию элемента jsp:setProperty.
property
Этот обязательный атрибут
устанавливает свойство, которое вы
хотите установить. Однако существует
частный случай: значение "*"
означает что все параметры запроса, чьи
имена совпадают с именами свойств bean
будут переданы соответствующему методу установки
свойств.
value
Этот необязательный атрибут
устанавливает значение свойства.
Строковые значения автоматически
преобразуются в числовые, boolean,
Boolean, byte, Byte, char
и Character с использованием
стандартного метода valueOf
соответствующего класса. Например,
значение "true" для свойства boolean
или Boolean будет конвертированно при
помощи метода Boolean.valueOf, а значение "42"
для свойства int или Integer
будет конвертированно при помощи метода Integer.valueOf.
Вы не можете одновременно использовать
атрибуты value и param, но можете
вообще их не использовать. Ознакомьтесь с
описанием атрибута
param, которое представлено ниже.
param
Этот необязательный атрибут
устанавливает параметр запроса,
используемый для получения свойства.
Если в текущем запросе этот параметр
отсутствует, никаких действий не
происходит: система не передает
значение null методу
устанавливающему свойства. Таким образом,
допустимо использование в bean свойств по
умолчанию, переопределяя их лишь в том
случае если этого требуют параметры
запроса. Например, следующий фрагмент
означает следующее: "установить
свойство numberOfItems в соответствии со
значением параметра запроса numItems,
а если такой параметр в запросе
отсутствует - никакие действия не
выполняются."
Если вы не
используете ни value, ни param,
это приравнивается к тому, как если бы вы
задали имя param совпадающее с именем
property. Вы можете применить этот
принцип автоматического использования
свойств запроса, чьи имена совпадают с
именами свойств и пойти далее, задав в
качестве имени свойства "*" и
опустив параметры value и param.
В этом случае сервер обработает
допустимые свойства и параметры запроса,
на предмет совпадения их с идентичными
именами.
Далее приведен пример в котором используется
bean для создания
таблицы простых чисел. Если существует
параметр numDigits в данных запроса, он
передается в свойство beannumDigits.
Аналогично для numPrimes.
Этот элемент определяет значение свойства bean,
конвертирует его в строку и направляет в
поток вывода. Для выполнения действия
требуется задание двух атрибутов: имени bean,
которое предварительно задается в действии
jsp:useBean, и имя свойства, значение которого
должно быть определено. Далее приведен
пример использования этого действия. За
другими примерами обратитесь к разделам 8.2
и 8.4.
Это действие позволяет вам передать запрос
другой странице. Оно использует один
атрибут, page, который должен
содержать относительный URL. Ей может быть как статическое
значение, так и вычисляемое в процессе
запроса, что и показано на следующих двух
примерах:
Это действие позволяет вам вставить
элемент OBJECT или EMBED (в
зависимости от типа используемого броузера),
необходимый для запуска апплетов,
использующих plugin Java.
Ниже приведены несколько конструкций,
которые вы можете использовать в тех
случаях, когда требуется вставить
комментарий или использовать символы,
зарезервированные для данного тэга:
Синтаксис
Назначение
<%-- комментарий --%>
Комментарий JSP. Игнорируется
транслятором JSP-в-скриплет. Все
заключенные в тэг элементы JSP, директивы
или действия игнорируются.
<!-- комментарий -->
Комментарий HTML. Передается в конечный HTML.
Все заключенные в тэг элементы JSP,
директивы или действия выполняются.
<\%
Применяется в тексте шаблона (статическом
HTML) для воспроизведения символов "<%".
%\>
Применяется в элементах скриптов для
воспроизведения символов "%>".
\'
Одиночная кавычка в атрибуте,
использующем одиночные кавычки. Однако,
помните что вы можете использовать как
одиночные, так и двойные кавычки, а также
другие символы выделения цитирования, не
требующие применения специальных тэгов.
\"
Двойная кавычка в атрибуте,
использующем двойные кавычки. Однако,
помните что вы можете использовать как
одиночные, так и двойные кавычки, а также
другие символы выделения цитирования, не
требующие применения специальных тэгов.
%\>
%> в атрибуте.
<\%
<% в атрибуте.
Это
руководство было ранним наброском
материалов, позднее вошедших в книгу Core Servlets and JavaServer Pages
(Sun Microsystems Press 2000).
Зупер! Я знал из вышенаписанного лишь 40% до прочтения!
Александр / 25 декабря 2005, 13:51:06
Отличная вещь!
Я долго работал на PHP.
Сейчас нужно было очень быстро освоить JSP
- это руководство как раз то что нужно!
Кратко и по делу.
Спасибо авторам.
Sergey / 09 ноября 2005, 14:01:08
Огромное спасибо, за руководство, отличное подспорье в работе с jsp. Особенно удобно для тех кто не помнит синтаксис, а время поджимает