отчеты по лабораторным работам / лабораторная работа 6 (jsp) / Java Server Page
.pdfpropertyИмя свойства, значение которого необходимо получить
Значения атрибутов в тегах 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-документ с приветствием и текущей датой.