Технология JavaServer Pages

Автор работы: Пользователь скрыл имя, 27 Февраля 2014 в 15:52, реферат

Краткое описание

Технология JavaServer Pages (JSP) позволяет легко создавать web содержимое, которое имеет как статические, так и динамические компоненты.
JSP технология воплощает все динамические возможности технологии Java Servlet, но обеспечивает более естественный способ создания статического содержимого. Главные особенности JSP технологии:
Язык разработки JSP страниц, которые являются текстовыми документами и описывают, как обработать запрос и построить ответ.
Структурные компоненты для доступа к серверным объектам.
Механизмы для определения расширений языка JSP.

Прикрепленные файлы: 1 файл

ТЕХНОЛОГИЯ JSP.doc

— 251.50 Кб (Скачать документ)

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

Выполнение

Вы можете контролировать различные параметры выполнения JSP страницы. Директивы, которые относятся к буферизации выхода и ошибкам обработки, обсуждаются здесь. Другие директивы рассматриваются в контексте специфических задач на протяжении всей главы.

Буферизация

Когда выполняется JSP страница, выход, записанный в объект response, автоматически буферизуется. Вы можете настраивать размер буфера следующей директивой:

<%@ page buffer="none|xxxkb" %>

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

 

Ошибки обработки

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

<%@ page errorPage="file_name" %>

Страница приложения Duke's Bookstore initdestroy.jsp содержит директиву

<%@ page errorPage="errorpage.jsp"%>

В начале страницы errorpage.jsp указано, что она используется как страница ошибок. Для этого служит директива:

<%@ page isErrorPage="true|false" %>

Эта директива делает объекты исключений (типа javax.servlet.jsp.JspException) доступными странице ошибок, так что вы можете извлечь, интерпретировать и отобразить информацию о причине исключения на странице ошибок.

Замечание

Вы также можете определить страницу ошибок для WAR, который содержит JSP страницу. Если страница ошибок определена и для WAR и для JSP page, ошибка JSP страницы принимает приоритет.

Инициализация и завершение JSP Page

Вы можете переделать процесс инициализации, чтобы позволить JSP странице читать постоянные данные конфигурации, инициализировать ресурсы и выполнить любые другие разовые действия путем перегрузки метода jspInit интерфейса JspPage. Вы освобождаете ресурсы, используя метод jspDestroy. Методы, определяемые с использованием JSP деклараций, обсуждаются в разделе Declarations.

Страница примера bookstore initdestroy.jsp определяет метод jspInit, чтобы найти или создать компонент JavaBeans database.BookDB, который представляет базу данных bookstore:

 

private BookDB bookDB;

public void jspInit() {  

bookDB =  

(BookDB)getServletContext(). getAttribute("bookDB");

 

 

   if (bookDB == null) {     

try {        

bookDB = new BookDB();        

getServletContext().setAttribute(           

"bookDB", bookDB);     

} catch (Exception ex) {        

System.out.println(ex.getMessage());     

 }  

}

}

И метод jspDestroy, чтобы удалить компонент JavaBeans и освободить переменную BookDB.

public void jspDestroy() {  

try {     

bookDB.remove();  

} catch (Exception ex) {     

System.out.println(ex.getMessage());  

}  

getServletContext().removeAttribute("bookDB");   

bookDB = null;

}

Дальше следует ввод в действие бина database. Этот бин имеет две переменных: текущую книгу и ссылку на enterprise beandatabase. Ссылка создана с применением технологии, описанной в Getting Started.

public class BookDB {  

 String bookId = "0";  

private BookDBEJB database = null;

 

 

   public BookDB () throws Exception {     

try {        

InitialContext ic = new InitialContext();      

   Object objRef = ic.lookup(           

"java:comp/env/ejb/BookDBEJB");        

BookDBEJBHome home =           

(BookDBEJBHome)PortableRemoteObject.              

narrow(objRef, database.BookDBEJBHome.class);        

database = home.create();     

} catch (RemoteException ex) {        

throw new Exception(           

"Couldn't create database bean.");     

} catch (CreateException ex) {        

throw new Exception(           

"Couldn't create database bean.");     

} catch (NamingException ex) {        

throw new Exception("Unable to lookup home: "+        

"java:comp/env/ejb/BookDBEJB.");  

}  

public void remove () throws Exception {     

try {        

database.remove();        

database = null;     

} catch (RemoteException ex) {    

     throw new Exception(           

"Error while removing database bean.");      

} catch (EJBException ex) {        

throw new Exception(           

"Error while removing database bean.");      

} catch (RemoveException ex) {        

throw new Exception(           

"Error while removing database bean.");      

}  

}  

public void setBookId(String bookId) {     

 this.bookId = bookId;  

}  

...

}

Так как database bean разделяется между всеми JSP страницами (совместно используется ими), он должен быть инициализирован, когда стартует приложение, вместо того чтобы инициализироваться в каждой JSP странице. Java Servlet технология обеспечивает события цикла жизни приложения и классы listener для этих целей. В качестве упражнения вы можете перенести код, который управляет бином, в context listener class. Смотрите Handling Servlet Life Cycle Events о context listener, который инициализирует версию Java Servlet приложения bookstore.

Создание статического содержимого

Вы создаете статическое содержимое JSP страницы, просто написав ее так, как будто она состоит только из этого содержимого. Статическое содержимое может быть представлено в любом текстовом формате, таком как HTML, WML или XML. Форматом по умолчанию является HTML. Если вы хотите использовать другой формат, вы включаете в начало вашей JSP страницы page директиву с атрибутом contentType, устанавливающим тип формата. Например, если вы хотите, чтобы страница содержала данные, представленные в wireless markup language (WML), вы должны включить следующую директиву:

<%@ page contentType="text/vnd.wap.wml"%>

Реестр имен типа содержимого хранится в IANA (Агентство по выделению имен и уникальных параметров протоколов интернет) на:

ftp://ftp.isi.edu/in-notes/iana/assignments/media-types

Создание динамического содержимого

Вы создаете динамическое содержимое подключением Java объектов из скриптовых элементов.

Использование объектов внутри JSP Pages

Вы можете из JSP page получить доступ к разнообразным объектам, включая enterprise beans и JavaBeans компоненты. JSP технология автоматически делает такие объекты доступными, и вы можете также создать и получить доступ к объектам, специфическим для приложения.

Неявные объекты

Неявные объекты создаются web контейнером и содержат информацию, связанную с отдельными запросами, страницами или приложениями. Многие из этих объектов определяются Java Servlet технологией, на которой основана JSP технология, и которая подробно обсуждается в Java Servlet Technology. Следующая  таблица перечисляет эти неявные объекты.

Переменная

Класс

Пояснение

application

javax.servlet. 
ServletContext

Контекст для сервлета JSP страницы и любого web компонента, содержащегося в том же самом приложении. Смотрите Accessing the Web Context.

config

javax.servlet. 
ServletConfig

Информация об инициализации сервлета JSP страницы.

exception

java.lang. 
Throwable

Доступно только из страницы ошибок (error page). Смотрите Handling Errors.

out

javax.servlet. 
jsp.JspWriter

Выходной поток.

page

java.lang. 
Object

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

pageContext

javax.servlet. 
jsp.PageContext

Контекст JSP страницы. Содержит единственный API для управления различными контекстными атрибутами, описанными в Sharing Information. Этот API широко используется, когда реализуют tag handlers (программы обработки тегов) (смотрите Tag Handlers).

request

подтип от 
javax.servlet. 
ServletRequest

Запрос, запускающий выполнение JSP страницы. Смотрите Getting Information From Requests.

response

подтип от 
javax.servlet. 
ServletResponse

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

session

javax.servlet. 
http.HttpSession

Объект – сессия клиента. Смотрите Accessing the Web Context.


Таблица 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=      

Информация о работе Технология JavaServer Pages