JSP, структура и организацияРефераты >> Программирование и компьютеры >> JSP, структура и организация
Таблица 2. Неявные объекты.
Объекты, специфические для приложения
Если возможно, поведение приложения должно быть инкапсулировано в объекты, чтобы разработчики JSP страниц могли сосредоточиться на представлении результатов. Объекты могут быть созданы разработчиками, которые являются специалистами по Java, организации доступа к базам данных и другим сервисам. Имеется четыре пути создания и использования объектов внутри страницы JSP:
· Экземпляры и переменные класса сервлета JSP страницы создаются в декларациях (declarations) и становятся доступными в скриплетах (scriptlets) и выражениях (expressions).
· Локальные переменные класса сервлета JSP страницы создаются в декларациях и становятся доступными в скриплетах и выражениях.
· Атрибуты scope объектов (смотрите Scope Objects) создаются и используются в скриплетах и выражениях.
· JavaBeans компоненты могут быть созданы и стать доступными с использованием модернизированных (streamlined) JSP элементов. Эти элементы обсуждаются в главе JavaBeans Components in JSP Pages. Вы можете создать компонент JavaBeans в декларации или скриплете, и вызвать его методы в скриплетах и выражениях.
Декларации, скриплеты и выражения описаны ниже в JSP Scripting Elements.
Разделяемые объекты
Условия эффективного конкурентного доступа к разделяемым объектам описаны в Sharing Information и относятся к объектам, доступным из JSP страниц, которые выполняются как многопоточные сервлеты. Вы можете указать, как web контейнер должен координировать множественные клиентские запросы с помощью следующей page директивы:
<%@ page isThreadSafe="true|false" %>
Если isThreadSafe установлен в true, web контейнер может выбрать отправку множественных конкурентных клиентских запросов странице JSP. Это – настройка по умолчанию. Если используется true, вы должны должным образом синхронизировать доступ ко всем разделяемым объектам, определенным на уровне этой страницы. Сюда включаются объекты, созданные в декларациях, компоненты JavaBean, доступные на странице, и атрибуты scope объектов страницы.
Если isThreadSafe установлен в false, запросы направляются по одному в каждый момент времени в порядке их получения, и доступ к объектам страницы не нужно контролировать. Однако, вы все еще должны обеспечить, чтобы доступ к атрибутам приложений или session scope объектов и JavaBean компонентам был должным образом синхронизирован.
JSP скриптовые элементы
JSP скриптовые элементы используются, чтобы создать и получить доступ к объектам, определить методы и управлять потоком контроля. Так как одной из целей JSP технологии является отделение статических исходных данных от кода, необходимого для генерации динамического содержимого, рекомендуется очень умеренно использовать JSP скрипты. Много работы, которая требует использования скриптов, может быть устранена при использовании заказных тегов, описанных ниже в разделе Extending the JSP Language (расширения языка JSP).
JSP технология позволяет контейнеру поддерживать любые языки скриптов, которые могут вызывать Java объекты. Если вы хотите использовать другой язык скриптов вместо java, который задан по умолчанию, вы должны определить его в page директиве в начале JSP страницы:
<%@ page language="scripting language" %>
Так как скриптовые элементы конвертируются в выражения языка программирования в классе сервлета JSP страницы, вы должны декларировать все классы и пакеты, используемые в JSP странице.
Если языком страницы является java, вы декларируете, что JSP страница будет использовать класс или пакет, с помощью page директивы:
<%@ page import="packagename.*, fully_qualified_classname" %>
Страничка примера bookstore showcart.jsp импортирует классы, необходимые, чтобы реализовать карту покупок (shoppingcart), с помощью следующей директивы:
<%@ page import="java.util.*, cart.*" %>
Декларации
Декларация используется, чтобы объявить переменные и методы языка скриптов страницы. Синтаксис декларации имеет вид:
<%! декларация языка скриптов %>
Если в качестве языка скриптов используется Java, переменные и методы в JSP декларациях становятся декларациями класса сервлета JSP страницы.
Страничка примера bookstore initdestroy.jsp определяет экземпляр переменной, названной bookDB, а также методы инициализации и завершения jspInit и jspDestroy, обсужденные раньше:
<%!
private BookDB bookDB;
public void jspInit() {
.
}
public void jspDestroy() {
.
}
%>
Скриплеты
Скриплет может содержать любой фрагмент кода, который адекватен языку скриптов, используемому на странице. Синтаксис скриплета имеет вид:
<%
выражения на языке скриптов
%>
Если в качестве языка скриптов выбран java, скриплет трансформируется во фрагмент Java оператора и вставляется в метод service сервлета JSP страницы. Переменные языка программирования, созданные скриплетом, доступны везде на JSP странице.
JSP страница showcart.jsp содержит скриплет, который извлекает итератор для коллекции элементов, содержащихся в карте покупок (корзинке), и настраивает логическую структуру для перебора всех элементов карты. Внутри цикла JSP страница извлекает свойства объектов (книг) и форматирует их, используя разметку HTML. Так как цикл while открывает блок, разметка HTML формируется скриплетом, который закрывает этот блок.
<%
Iterator i = cart.getItems().iterator();
while (i.hasNext()) {
ShoppingCartItem item =
(ShoppingCartItem)i.next();
BookDetails bd = (BookDetails)item.getItem();
%>
<tr>
<td align="right" bgcolor="#ffffff">
<%=item.getQuantity()%>
</td>
<td bgcolor="#ffffaa">
<strong><link href="
<%=request.getContextPath()%>/bookdetails?bookId=
<%=bd.getBookId()%>"><%=bd.getTitle()%></a></strong>
</td>
.
<%
// Конец цикла while
}
%>
Результат показан ниже:
Рисунок 2.
Выражения
JSP выражения используются, чтобы вставлять значение выражения языка скриптов, преобразованное в строку, в поток данных, возвращаемых клиенту. Если языком скриптов является Java, выражение трансформируется в оператор, который преобразует значение выражения в объект String и вставляет его в неявный out объект.
Синтаксис выражения имеет вид:
<%=выражение языка скриптов %>
Отметим, что точка с запятой не допускается внутри JSP выражений, даже если такое выражение содержит точку с запятой, когда вы используете его в скриплете.
Следующий скриплет извлекает количество элементов в карте покупок:
<%
// Печатаем сводку для карты покупок (корзинки)
int num = cart.getNumberOfItems();
if (num > 0) {