Скачиваний:
82
Добавлен:
09.05.2014
Размер:
524.65 Кб
Скачать

8.5 Действие jsp:getProperty

Этот элемент определяет значение свойства bean, конвертирует его в строку и направляет в поток вывода. Для выполнения действия требуется задание двух атрибутов: имени bean, которое предварительно задается в действии jsp:useBean, и имя свойства, значение которого должно быть определено. Далее приведен пример использования этого действия. За другими примерами обратитесь к разделам 8.2 и 8.4.

<jsp:useBean id="itemBean" ... />

...

<UL>

<LI>Количество предметов:

<jsp:getProperty name="itemBean" property="numItems" />

<LI>Цена за штуку:

<jsp:getProperty name="itemBean" property="unitCost" />

</UL>

8.6 Действие jsp:forward

Это действие позволяет вам передать запрос другой странице. Оно использует один атрибут, page, который должен содержать относительный URL. Ей может быть как статическое значение, так и вычисляемое в процессе запроса, что и показано на следующих двух примерах:

<jsp:forward page="/utils/errorReporter.jsp" />

<jsp:forward page="<%= какое-нибудьВыражениеНаJava %>" />

8.7 Действие jsp:plugin

Это действие позволяет вам вставить элемент OBJECT или EMBED (в зависимости от типа используемого броузера), необходимый для запуска апплетов, использующих plugin Java.

9. Комментарии и символы цитирования Ниже приведены несколько конструкций, которые вы можете использовать в тех случаях, когда требуется вставить

комментарий или использовать символы, зарезервированные для данного тэга:

Синтаксис

Назначение

 

 

<%--

Комментарий JSP. Игнорируется транслятором JSP-в-скриплет.

комментарий --

Все заключенные в тэг элементы JSP, директивы или действия

%>

игнорируются.

 

 

<!--

Комментарий HTML. Передается в конечный HTML. Все

комментарий --

заключенные в тэг элементы JSP, директивы или действия

>

выполняются.

 

 

<\%

Применяется в тексте шаблона (статическом HTML) для

воспроизведения символов "<%".

 

 

 

%\>

Применяется в элементах скриптов для воспроизведения символов

"%>".

 

 

 

 

Одиночная кавычка в атрибуте, использующем одиночные

 

кавычки. Однако, помните что вы можете использовать как

\'

одиночные, так и двойные кавычки, а также другие символы

 

выделения цитирования, не требующие применения специальных

 

тэгов.

 

 

 

Двойная кавычка в атрибуте, использующем двойные кавычки.

\"

Однако, помните что вы можете использовать как одиночные, так

и двойные кавычки, а также другие символы выделения

 

 

цитирования, не требующие применения специальных тэгов.

 

 

%\>

%> в атрибуте.

 

 

<\%

<% в атрибуте.

 

 

JavaServer Pages (JSP) позволяют отделить динамическую часть страниц от статического HTML. Процедура довольно проста, создаѐте обычный код HTML (статический), а динамическую часть заключаете в специальные теги "<% %>".

Имя вашего хоста: <%= request.getRemoteHost() %>

JSP страницы имеют расширение .jsp и размещаются там же, где и обычные Web страницы. Структура таких страниц может состоять из пяти конструкций: HTML, комментарии, скриптовые элементы, директивы и действия. JSP страница при компиляции преобразуется в обычный сервлет со статическим содержимым, которое направляется в поток вывода,

связанный с методом service. Поэтому при первом запросе этот процесс может вызвать некую задержку, но в большинстве своѐм незаметную первому пользователю. Комментарии в документе или программе служат к объяснению содержимого. Они не являются причиной замедления программы, так как транслятор и исполнитель их

игнорируют. Скриптовые элементы позволяют вам указать код на языке Java, который впоследствии станет частью конечного сервлета, директивыдадут вам возможность управлять всей структурой сервлета, а действия служат для задания существующих используемых компонентов, а также для контроля над поведением движка JSP. Для упрощения работы со скриптами имеются заранее определѐнные переменные, такие как request, response, pageContext, session, out, application, config, page, exception. Пример JSP страницы с использованием всех составляющих JSP конструкции:

Содержимое папки WEB-INF

В папке WEB-INF для web-приложения должен содержаться дескриптор развертывания в виде файла с именем web.xml. Этот файл должен быть согласован с опубликованным компанией Sun определением DTD для дескриптора развертывания web-приложения.

Все файлы классов сервлетов Java, уникальные для данного web-приложения, включая классы, используемые JSPстраницами, должны развертываться во вложенной папке classes, если они получены в виде отдельных файлов классов. В этой папке сохраняется обычная иерархия пакетов, так что, например, файл класса для сервлета QanalysnsServ из пакета com.XmlEcomBook.Chap()? будет содержаться в следующей вложенной папке основной папки приложения:

WEB-INF/classes/com/XmIBook/QanalysisServ.class

Альтернативой хранению отдельных файлов классов во вложенной папке classes является создание библиотеки файлов

.jar. Файлы .jar, расположенные в папке WEB-INF/lib, доступны виртуальной машине Java при загрузке классов и других ресурсов для web-приложения. Заметим, что файлы .zip в этой папке будут игнорироваться, поэтому следует использовать файлы с расширением .jar.

Общие классы и наборы инструментальных средств, которые должны быть доступны для всего web-сайта, могут развертываться обычным для Java способом с использованием стандартных настроек путей классов. Не существует способа разрешить совместное использование какого-либо класса только избранным приложениям; доступ к классу разрешен либо только одному приложению, либо всем.

Дескриптор развертывания web-приложения

В API сервлетов имеются спецификации, которые на основе составленного компанией Sun определения DTD идентифицируют сведения, содержащиеся в дескрипторе развертывания приложения. В листинге 10.1 показана часть файла web.xml, который использовался для некоторых сервлетов, описанных в этой книге.

Листинг 10.1. Часть файла web.xml для web-приложения (web.xml)

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc. //DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> <web-app>

<servlet><servlet-name>cattest</servlet-name> <servlet-class>com.XmlEcomBook.catalog.CatalogTestServ

</servlet-class> </servlet>

<servlet><servlet-name>catalog</servlet-name> <servlet-class>com.XmlEcomBook.catalog.CatalogServ

</servlet-class> <init-param>

<param-name>workdir</param-name> <param-value>e:\\scripts\\XMLgifts</param-value> </init-param>

</servlet>

В листинге 10.2 показана начальная часть файла web.dtd из версии 2.2 API сервлетов. Полная копия файла, содержащая более 400 строк, имеется на прилагаемом к книге компакт-диске.

Листинг 10.2. Часть DTD для web-приложений, в которой показаны элементы первого уровня (web.dtd)

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- The web-app element is the root of the deployment descriptor for a web application -->

<!ELEMENT web-app (icon?, display-name?, description?, distributable?, context-param*, servlet*, servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?, error-page*, taglib*, resource-ref*, security-constraint*, login-config?, security-role*, env-entry*, ejb-ref*)>

Параметры конфигурации

Как видно по именам элементов в листинге 10.2, большое количество параметров конфигурации web-приложения можно устанавливать из файла web.xml. Эти параметры удобно разделить на следующие категории:

параметры инициализации ServletContext;

конфигурация HttpSession;

определение и отображение сервлетов и JSP-страниц;

отображение типов MIME;

стандартные страницы с приветствием;

страницы ошибок;

параметры безопасности.

Использование параметров каждой из этих категорий подробно описано в официальном руководстве по API сервлетов, поэтому здесь мы не будем рассказывать обо всех параметрах.) Наиболее вероятно, что из всех этих параметров вам потребуются только параметры для определения и отображения сервлетов и JSP-страниц. Например, рассмотрим следующий фрагмент листинга 10.1:

<servlet><servlet-name>catalog</servlet-name> <servlet-class>com.XmlEcomBook.catalog

.CatalogServ</servlet-class>

<init-param>

<param-name>workch r</param-name>

<param-value>e:\\scMpts\\XMLgTfts</param-val.ue>

</init-param> </servlet>

Этот фрагмент отображает класс сервлета в папку имен и создает один параметр инициализации с именем workdir и значением е: \\scripts\\XMLgifts. Здесь используется символ \\, так как одна косая черта \ играет роль управляющего символа для строк Java.

Жизненный цикл страницы JSP

Страница JSP обслуживает запросы, как сервлет. Следовательно, жизненный цикл и многие возможности страниц JSP (в частности, динамические аспекты) определяются технологией Java Servlet и многие обсуждения в этой главе ссылаются на функции, описанные в разделе cервлетов. Когда запрос отображается на страницу JSP, он обрабатывается специальным сервлетом, который сначала проверяет, не старше ли сервлет страницы JSP, чем сама страница JSP. Если это так, он переводит страницу JSP в класс сервлета и компилирует класс. При разработке Web-приложения одним из преимуществ страниц JSP перед сервлетами является то, что процесс построения (компиляции страницы JSP в сервлет) выполняется автоматически.

Трансляция и компиляция

На фазе трансляции каждый тип данных в странице JSP интерпретируется отдельно. Шаблонные данные трансформируются в код, который будет помещать данные в поток, возвращающий данные клиенту. Элементы JSP трактуются следующим образом:

директивы, используемые для управления тем, как Web-контейнер переводит и выполняет страницу JSP;

скриптовые элементы вставляются в класс сервлета страницы JSP;

элементы в форме <jsp:XXX ... /> конвертируются в вызов метода для компонентов JavaBeans или вызовы API

Java Servlet.

Ифаза трансляции, и фаза компиляции могут порождать ошибки, которые будут выведены только, когда страница будет в первый раз запрошена. Если ошибка возникает при трансляции страницы (например, транслятор находит элемент JSP с неправильным форматом), сервер возвращает ParseException, и исходный файл класса сервлета будет пустым или незаконченным. Последняя незаконченная строка дает указатель на неправильный элемент JSP. Если ошибка возникает при компиляции страницы (например, синтаксическая ошибка в скриптлете), сервер возвращает JasperException и сообщение, которое включает в себя имя сервлета страницы JSP и строку, в которой произошла ошибка.

Когда страница оттранслирована и откомпилирована, сервлет страницы JSP в основном следует жизненному циклу сервлета, описанному в разделе Жизненный цикл сервлета :

1.Если экземпляр сервлета страницы JSP не существует, контейнер: o загружает класс сервлета страницы JSP;

o создает экземпляр класса сервлета;

o инициализирует экземпляр сервлета вызовом метода jspInit.

2.Вызывает метод _jspService, передавая ему объекты запроса и отклика.

Если контейнеру нужно удалить сервлет страницы JSP, он вызывает метод jspDestroy.

Выполнение страницы JSP

Различными параметрами выполнения страницы JSP можно управлять при помощи директив page. Когда страница JSP выполняется, вывод, записываемый в объект отклика, автоматически буферизируется. Размер буфера можно установить директивой page. Больший буфер позволяет записать больше содержимого, прежде чем что-либо действительно будет передано клиенту, это предоставляет странице JSP больше времени на установку соответствующих кодов состояния и заголовков или на обращение к другому Web-ресурсу. Меньший буфер уменьшает загрузку памяти сервера и позволяет клиенту быстрее начать получение данных.

При выполнении страницы JSP может возникать любое число исключений. Чтобы определить, что Web-контейнер должен передавать управление странице ошибки, если происходит исключение, необходимо определить в странице JSP следующую директиву page:

<%@ page errorPage="file_name" %>

Соседние файлы в папке лабораторная работа 6 (jsp)