Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lec-JSP-v001

.pdf
Скачиваний:
7
Добавлен:
18.03.2015
Размер:
1.99 Mб
Скачать

НЕЯВНЫЕ ПЕРЕМЕННЫЕ ДОСТУПНЫЕ НА JSP СТРАНИЦАХ

request

- interface

javax.servlet.http.HttpServletRequest

response

- interface

javax.servlet.http.HttpServletResponse

pageContext

- class

javax.servlet.jsp.PageContext

session

- interface

javax.servlet.http.HttpSession

application

- interface

javax.servlet.ServletContext

out

- class

javax.servlet.jsp.JspWriter

page

- class

java.lang.Object (требует приведения типа)

config

- interface

javax.servlet.ServletConfig

exception

- class

java.lang.Throwable

 

 

 

Неявный объект page ссылается на сгенерированный сервлет и не представляет область видимости контейнера. Неявный объект pageContext представляет область видимости страницы контейнера. В предыдущем примере мы осуществляли поиск атрибута с использованием объекта application :

<jsp:setProperty name="authBean" property="dataSorce"

value='<%= (DataSource)application.getAttribute("jdbc/oraCP") %>„/>

Атрибутом здесь является источник данных

ИСПОЛЬЗОВАНИЕ JAVA BEANS

Элемент

<jsp:useBean id="authBean" scope="session"

class="org.bookstore.beans.AuthBeanX">

 

useBean

<jsp:setProperty name="authBean"

 

является

property="dataSourceName"

XML текстом

value="<%= Glo.getMainDSName()%>"/>

внутри JSP.

</jsp:useBean>

 

 

Значение атрибута id="authBean", по сути является именем переменной,

содержащей ссылку на экземпляр компонента созданного неявно (оператор new мы нигде явно не применяли). Таким образом этот элемент описывает экземпляр класса AuthBeanX, который создаѐтся для нужд страницы и используемый внутри нее.

Он нам нужен, чтобы не перегружать страницу Java кодом.

Атрибут scope позволяет установить область видимости экземпляра создаваемого класса и может иметь следующие значения :

page | request | session | application

ЗНАЧЕНЕ АТРИБУТА SCOPE

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

page – областью видимости является страница с ее компонентами (значение по умолчанию)

request - в дополнение к связыванию с локальной переменной сервлета, ссылка на экземпляр класса будет размещена в объекте HttpServletRequest на время обработки текущего запроса. Эту ссылку можно получить из любого сервлета, при обработке запроса,

методом getAtribute()класса HttpServletRequest. session - ссылка на экземпляр будет размещаться в объект класса

HttpSession.

application - дополнительная ссылка будет размещаться в объекте класса ServletContext, то есть в разделяемом объекте. Получить такую ссылку можно используя предопределенную переменную application или с помощью вызова метода getServletConext().getAttribute().

ОСОБЕННОСТИ РАБОТЫ ДЕЙСТВИЯ JSP:USEBEAN

Действие useBean сначала пытается найти существующий экземпляр компонента в заданной области видимости. Если компонент не найден, действие создает экземпляр класса, описанного атрибутом class или beanName (в случае beanName сериализованный компонент также может загружаться из файла).

Действие загрузки класса эквивалентно следующему:

java.beans.Beans.instantiate( classLoader, "MyBean" );

Отметим, что атрибут class не должен задаваться при использовании атрибута beanName, поскольку класс компонента определяется либо сериализованными данными компонента, либо значением атрибута beanName.

При наличие атрибута type ссылка на порожденный объект должна быть приведена к заданному типу.

ДРУГИЕ АТРИБУТЫ ДЕЙСТВИЯ JSP:USEBEAN

class - Полностью квалифицированное название класса, экземпляр которого создается. Если атрибуты class и beanName не заданы, объект уже должен существовать в заданной области видимости.

beanName - Название компонента, которое используется методом instantiate() класса java.beans.Beans. В

отличие от значения атрибута class, значение этого атрибута может быть получено вычислением во время выполнения.

type - Если задан, определяет тип переменной, содержащей ссылку на экземпляр класса. Значение может быть суперклассом создаваемого класса или интерфейсом, реализованным классом, в противном случае, во время выполнения запроса будет выброшено исключение. java.lang.ClassCastException, когда будет сделана попытка приведения к данному типу.

ИСПОЛЬЗОВАНИЕ USEBEAN (ОКОНЧАНИЕ)

Элемент задания

<jsp:setProperty name="authBean"

свойства бина

property="country" value='<%= cntry %>' />

устанавливает значение свойства country для компонента AuthBean. То же самое можно было бы сделать и с помощью скриптлета :

<% authBean.setCountry( country ); %>

Однако первый вариант все же лучше, поскольку использует XML элемент.

(!) Если название свойства совпадает с названием параметра request-запроса - можно использовать следующий синтаксис:

<jsp:setProperty name="beanName" property="propName"/>

(!) Если название всех свойства компонента совпадает с названием, соответствующих параметров запроса, получаемых из запроса можно использовать звжздочку вместо имени свойства:

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

Элемент чтения свойств бина:

<jsp:getProperty name="authBean" property="country" />

<%@ page import="java.sql.*" %>

ДИРЕКТИВЫ

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

page, include и taglib.

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

include - указывает на необходимость при трансляции вставить текст и/или код (файл) в класс сервлета, в том месте, где директива располагается.

<%@ include file="copyright.html" %>

taglib - описывает библиотеку пользовательских тегов и размещается в начале страницы.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

ДИРЕКТИВА PAGE

Хотя эту директиву можно размещать в любом месте страницы, до потенциального использования

соответствующего атрибута, но обычно ее размещают вначале страницы. Следующая директива отключает буферизацию и описывает

страницу ошибок. <%@ page buffer="none" errorPage="/fail.jsp" %>

Для указания на открытие и закрытие директивы используются соответственно символы "<%@" и "%>".

Атрибут contentType позволяет браузеру правильно интерпретировать результирующий контент.

<%@ page contentType="text/html;charset=windows-1251" %>

При использовании кодировки UTF-8, которая поддерживает почти любую локализацию (смотри Java класс Local) :

<%@ page contentType="text/html; charset=UTF-8" %>

Для указания на то, что данная страница служит для обработки ошибок предусмотрен следующий вариант директивы page :

<%@ page isErrorPage=“true” %>

ЭЛЕМЕНТЫ СКРИПТ ЯЗЫКА НА JSP СТРАНИЦЕ

Выражение начинается символами "<%@=" , а завершается - "%>".

Та особенность, что в выражении нем знак равенства используется в конструкции "<%=", где фактически отсутствует левая часть присваивания, а в конце выражения также отсутствует обычный терминирующий символ «точка с запятой»

и отличает выражение от скриптлета.

<%= count %>

<%= An Expression %>

Декларация описывает и определяет методы и

переменные:

 

 

 

 

 

 

 

<%! Java Declarations %>

 

<%! int count = 0; %>

 

Скриптлет является относительно большим набором

операторов языка Java в JSP:

 

 

 

 

 

 

<% Some Java code %>

<% count++; %>

 

 

 

 

 

 

 

 

 

 

 

 

<% for (int i=0; i < 5; i++ )

 

<% if ( flag ) { %>

 

 

 

 

 

 

 

 

 

Все прекрасно !

 

 

{

%>

 

 

 

 

 

 

 

 

<% } else {

%>

 

 

 

<TR><TD>i</TD>

 

Все пропало !

 

 

 

 

<TD><%= count %></TD></TR>

 

<% } %>

 

 

 

 

<% }

%>

 

 

 

 

 

 

 

 

 

 

 

ШАБЛОН ПРОЕКТИРОВАНИЯ

VIEW HELPER

Бизнес классы изменяются реже чем внешний вид приложения (представление). Для упрощения управления и повторного использования желательно разделить бизнес логику и презентационную часть.

«View Helper» является классом, который выполняет извлечение данных для представления. Он адаптирует ресурсы данных до простого API применяемого представлениями.

Т.о. шаблон «View Helper» отделяет бизнес классы от классов предcтавления и позволяет им изменяться независимо. Это разделение также повышает возможность повторного использования кода.

Так представление cможет фокусироваться на форматировании и презентационной логике, а объект, основанный на шаблоне View Helper , станет управлять процессом извлечения данных (как полноценный адаптер или простой маппер).

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