В этой главе детально разбираются Элементы Скриптинга, когда значением директивы language
является "java".
Этот язык скриптинга базируется на языке программирования Java (как
специфицировано в "The Java Language Specification"), но заметьте, что верная Java-программа
не является верной JSP-страницей или её разделом.
Далее детально описаны взаимоотношения объявлений скриптинга, скриптлетов и
выражений скриптов и языка программирования Java. Описание дано в терминах
структуры класса реализации JSP-страницы.
От JSP-контейнера не требуется генерировать класс реализации JSP-страницы, но он
обязан вести себя так, как будто этот класс существует.
Некоторые детали того, что делает JSP-страницу таковой, весьма специфичны для языка скриптинга, используемого на странице. Это особенно усложнено из-за того, что скриптлеты являются фрагментами, а не законченными операторами языка.
JSP-страница является таковой для Платформы Java, если, и только если, класс
реализации JSP-страницы, определённый по Таблице JSP.6-1
(после применения всех директив include
), вместе со всеми прочими
классами, определёнными JSP-контейнером, является верной программой для данной
Java-Платформы и если он передаёт методы проверки для всех библиотек тэгов,
ассоциированных с этой JSP-страницей.
Sun Microsystems резервирует для спецификаций JSP все имена, имеющие форму {_}jsp_*
и {_}jspx_*, в любом сочетании верхнего и нижнего регистров.
Имена, имеющие такую форму и не определённые в данной спецификации,
зарезервированы фирмой Sun для будущих расширений.
Трансформации, описанные в этой главе, не должны выполняться буквально.
Реализации могут выполнять их по-разному с целью обеспечения наилучшей производительности,
экономии памяти или других атрибутов реализации.
необязательное выражение импорта, как указано директивой jsp . |
import name1
|
SuperClass выбирается JSP-контейнером, либо автором
JSP через использование директивы jsp . Имя класса (_jspXXX) зависит от реализации. |
class _jspXXX extends SuperClass
|
Начало тела/body класса реализации JSP-страницы. | { |
(1) Раздел Объявлений | // объявления... |
Подпись для генерируемого метода. |
public void _jspService(<ServletRequestSubtype>
|
(2) Раздел Неявных/Implicit Объектов | // код, определяющий и инициализирующий request, response,
page, pageContext и т.п. |
(3) Главный/Main Раздел | // код, определяющий выражение отображения request/response
метода _jspService
|
закрытие метода _jspService
|
} |
закрытие _jspXXX
|
} |
Раздел объявлений соответствует элементам объявлений. Содержимое этого раздела определяется путём конкатенации всех объявлений на странице в порядке их появления.
Этот раздел определяет и инициализирует неявные объекты, доступные JSP-странице. См. Раздел JSP.2.8.3, "Неявные Объекты.
Этот раздел осуществляет главное отображение/mapping между объектами request
и response
.
Содержимое кодового сегмента 2 определяется скриптлетами, выражениями и текстовым телом JSP-страницы.
Элементы обрабатываются последовательно в порядке их появления на странице.
Трансляция каждого из них определяется так, как показано ниже, и вставляется в данный раздел.
Трансляция зависит от типа элемента:
Шаблонные данные трансформируются в код, который будет размещать
шаблонные данные в потоке, именованном неявной переменной out
в процессе
исполнения кода. Пробелы сохраняются.
Опуская подробности закавычивания и производительности, это соответствует оператору вида:
Оригинал | Эквивалентный Текст |
---|---|
шаблон | out.print(шаблон) |
Скриптлет трансформируется во фрагмент кода вида:
Оригинал | Эквивалентный Текст |
---|---|
<% фрагмент %> | фрагмент |
Выражение трансформируется в оператор Java для вставки значения выражения
(конвертированного, если необходимо, в
java.lang.String)
, в поток, именованный неявной переменной
out
.
Никакие дополнительные символы новой строки или пробелы не включаются.
Опуская подробности закавычивания и производительности, это соответствует
оператору вида:
Оригинал | Эквивалентный Текст |
---|---|
<%= выражение %> | out.print(выражение) |
Акция, определяющая один или более объектов, трансформируется в одно или
несколько объявлений переменных для этих объектов вместе с кодом, инициализирующим эти
переменные. На их видимость влияют другие конструкции, например, скриптлеты.
Семантика типа акции определяет имена переменных (обычно имя атрибута
id
, если он имеется) и их тип.
Единственной стандартной акцией в спецификации JSP, которая определяет объекты,
является акция jsp:usebean
. Имя вводимой переменной это имя атрибута
id
, а тип - атрибута класса.
Оригинал | Эквивалентный Текст |
---|---|
|
объявляются переменные AT_BEGIN |
Обратите внимание, что значение атрибута scope
/область видимости
не влияет на видимость переменных внутри генерируемой программы. Оно влияет на
то, где и как долго будут существовать дополнительные ссылки на объект, обозначенный этой переменной.