Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LectBL_DB_Theme3.doc
Скачиваний:
4
Добавлен:
15.08.2019
Размер:
104 Кб
Скачать
☆

Елементи action

Незалежно від того, який тип матиме документ, що генерується у відповідь на запит користувача, в загальному випадку, JSP сторінка містить текст і теги. Очевидно, що останні відповідають типу документа, що генерується: HTML, XML і т.д. Крім того, в тілі JSP сторінки можуть міститися фрагменти програмного коду на мові Java, які повинні увійти до складу сервлета, одержуваного після трансляції: декларації, скриплеты і вирази. Ідея полягає в тому, щоб доповнити набір тегів стандартної розмітки спеціальними тегами - елементами action, за якими розробник програми може приховати частину програмного коду, що відноситься до неї, або деякі додаткові інструкції.

Відмітимо, що з погляду фахівця з верстки документів, елементи action є такими ж тегами, як і всі інші, а тому допустимо їх сумісне використання з іншими елементами:

<jsp:setProperty name="results" property="row" value="<%= i+1 %>" />

Розглянемо деякі з цих елементів.

Стандартні елементи action

Стандартні елементи action виглядають як звичайні теги, назва яких починається з поєднання символів jsp:, наприклад <jsp:include ...>. Згідно термінології XML, це означає, що стандартні елементи action в технології JSP належать простору імен jsp.

jsp:useBean

Елемент jsp:useBean дозволяє використовувати на JSP сторінці об'єкти, відповідні компонентам JavaBean. Елемент <jsp:useBean> містить параметр, який пов'язує з компонентом якийсь унікальний ідентифікатор. Останній потім використовуватиметься при зверненнях до цього об'єкту:

<jsp:useBean id="customer" class="com.myco.Customer" />

У даному прикладі створюється об'єкт класу com.myco. Надалі, щоб звернутися до нього, досить скористатися ідентифікатором "customer". Наприклад:

<%= customer.getName() %>

За змовчанням, об'єкти, пов'язані з елементом JavaBean, мають область видимості page. Розробник JSP сторінки може вказати триваліший час існування об'єкту JavaBean, скориставшись при написанні елементу jsp:useBean елементом scope. Можливі значення цього атрибуту - page, request, session і application обговорювалися раніше.

jsp:setProperty і jsp:getProperty

Будь-який клас повинен давати доступ до деяких з своїх атрибутів і методів. Відмінність елементу JavaBean полягає в тому, що доступ до атрибутів у нього уніфікований і реалізується на JSP сторінці за допомогою елементів jsp:setProperty і jsp:getProperty.

Елемент jsp:getProperty бере екземпляр Bean, витягує значення вказаного атрибуту, перетворить його у разі потреби в рядок і поміщає в потік даних, передаваних клієнту. Наприклад, згідно наступного запису

<jsp:getProperty name="user" property="name" />

у документ, що генерується, поміщається значення властивості name з екземпляра Bean, що має ідентифікатор user.

Елемент jsp:setProperty, на відміну від попереднього, не витягує, а задає нове значення атрибуту. Наприклад:

<jsp:setProperty name="user" property="name" value="Victor" />

Крім явного задання нових значень, елемент jsp:setProperty дозволяє заносити в атрибут об'єкту значення, витягнуте із запиту клієнта. Наприклад:

<jsp:setProperty name="user" property="name" param="login" />

Даний запис означає, що серед даних, одержаних від клієнта, знаходиться параметр login і його значення передається для переміщення в атрибут name об'єкту Bean, що має ідентифікатор "user".

Нарешті, коли назви полів в запиті клієнта співпадають з назвами атрибутів об'єкту Bean, передбачений ще один варіант, коли разом здійснюється перенесення всіх значень. Наприклад:

<jsp:setProperty name="user" property="*" />

jsp:include

Подібно до директиви include, даний елемент дозволяє поміщати в тіло сторінки, що динамічно генерується, статичний і динамічний матеріал із зовнішнього джерела. При цьому, хоча запозичений таким чином матеріал обробляється в тому ж контексті, що і поточна сторінка, йому надається доступ тільки до вихідного потоку сервлета. Наприклад, код, що включається в JSP сторінку, не повинен звертатися до cookies або використовувати власні заголовки, що декларують кодування або тип документа.

Відмінність директиви include від елементу jsp:include полягає в тому, що для неї матеріал, що включається, не може бути динамічним, а пошук і обробка можливих динамічних фрагментів здійснюється не окремо, а після включення, зі всією сторінкою.

Приклад використання елементу jsp:include:

<jsp:include page="/inc/menu.jsp" />

jsp:forward

Даний елемент дозволяє переадресувати подальше формування динамічної сторінки на іншу JSP сторінку, сервлет або використовувати для завершення наперед підготовлений текст. Наприклад:

<jsp:forward page="/inc/copyright.jsp" />

У наступному, складнішому прикладі динамічна сторінка завершується вмістом текстового файлу, назва якого береться із змінної someValue:

<% String whereTo = "/templates/" + someValue; %>

<jsp:forward page='<%= whereTo %>' />

На завершення слід зазначити, що є дві основні схеми обробки запитів клієнта.

У першому випадку, обробка запиту клієнта і формування у відповідь динамічної сторінки проводяться в рамках однієї JSP сторінки або сервлета. Остання, у разі потреби, може звертатися до об'єктів JavaBean або імпортувати матеріал із зовнішніх джерел за допомогою директиви include або елементу jsp:include.

У другому випадку, обробка проводиться в два етапи. Спершу управління подається на сервлет або JPS сторінку, здійснюючу власне обробку запиту. Наприклад, із запиту клієнта витягуються дані і поміщаються в базу даних або атрибути певних об'єктів. Потім управління передається на окрему JSP сторінку або сервлет, відповідальні за генерацію динамічної сторінки для подальшої передачі її клієнту. При цьому між обробкою запиту і генерацією нової сторінки необов'язково повинен існувати який-небудь взаємозв'язок. Наприклад, це може бути всього лише повернення клієнта на головну сторінку після закінчення якої-небудь процедури.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]