JSP, структура и организация
Рефераты >> Программирование и компьютеры >> 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. Таблица 19 перечисляет эти неявные объекты.

Переменная

Класс

Пояснение

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.


Страница: