JSP, структура и организацияРефераты >> Программирование и компьютеры >> JSP, структура и организация
Таблица 1. Пример Duke's Bookstore JSP Pages.
Исходные тексты для этого приложения расположены в examples/src/web/bookstore2. Данные для приложения bookstore по прежнему поддерживаются в базе данных Cloudscape. Однако, два изменения сделаны для объекта helper базы данных (database helper object) database.BookDB:
· Объект helper переписан таким образом, чтобы соответствовать моделям проектирования компонентов JavaBeans в JavaBeans Components in JSP Pages. Это изменение делается так, чтобы JSP страницы могли получить доступ к helper объекту, используя элементы языка JSP, специфичные для компонентов JavaBeans.
· Вместо непосредственного доступа к базе данных книжного магазина, helper объект использует enterprise bean. Преимущество использования enterprise bean состоит в том, что объект helper больше не отвечает за соединение с базой данных; эта работа поручена enterprise bean. Кроме того, контейнер EJB поддерживает пул соединений с базой, поэтому enterprise bean может быстрее получить это соединение, чем helper объект. К enterprise bean имеют отношение следующие интерфейсы и классы: database.BookDBEJBHome home интерфейс, database.BookDBEJB remote интерфейс, и класс реализации database.BookDBEJB, который содержит все JDBC вызовы к базе данных.
Наконец, эта версия примера использует апплет для генерации динамических цифровых часов в баннере. Смотрите Including an Applet, где описывается JSP элемент, который генерирует HTML для загрузки апплета.
Чтобы построить, развернуть и исполнить пример:
1. Перейдите в examples/src и постройте пример, выполнив ant bookstore2.
2. Запустите базу данных Cloudscape, выполнив cloudscape -start.
3. Если у вас еще нет базы данных bookstore, выполните ant create-web-db.
4. Запустите j2ee сервер.
5. Запустите deploytool.
6. Создайте J2EE приложение, названное bookstore2.
1. Выберите File->New Application или нажмите кнопку New Application.
2. Введите bookstore2.ear в поле Application File Name.
3. Нажмите OK.
7. Добавьте bookstore2 WAR к приложению bookstore2.
1. Выберите File->Add to Application->Web WAR или нажмите кнопку Web WAR.
2. В диалоге Add Web WAR перейдите в examples/build/web/bookstore2. Выделите bookstore2.war. Нажмите Add Web WAR.
8. Добавьте к приложению BookDBEJB enterprise bean.
1. Выберите File->New Enterprise Bean или нажмите кнопку New Enterprise Bean.
2. Выберите из выпадающего списка Enterprise Bean bookstore2.
3. Введите BookDBEJB в поле JAR Display Name.
4. Кликните Add Чтобы добавить файлы содержимого. Перейдите в папку examples/build/web/ejb и добавьте базу данных и пакеты исключений. Нажмите Next.
5. Выберите тип Bean: Session и Stateless.
6. Выберите BookDBEJBImpl для класса Enterprise Bean.
7. Выберите BookDBEJBHome для Home интерфейса.
8. Выберите BookDBEJB для Remote интерфейса.
9. Введите BookDBEJB для имени Enterprise Bean.
10.Введите BookDBEJB в поле JNDI Name около компонентаBookDB.
9. Добавьте ресурсную ссылку на базу данных Cloudscape.
1. Выберите BookDBEJB enterprise bean.
2. Выберите вкладку Resource Ref's.
3. Нажмите Add.
4. Выберите javax.sql.DataSource из списка Type.
5. Введите jdbc/BookDB в поле Coded Name.
6. Введите jdbc/Cloudscape в поле JNDI Name.
10. Добавьте ссылку на enterprise bean BookDBEJB.
1. Выберите bookstore2 WAR.
2. Выберите вкладку EJB Ref's.
3. Нажмите Add.
4. Введите ejb/BookDBEJB в поле Coded Name.
5. Введите Session в поле Type.
6. Введите BookDBEJBHome в поле Home.
7. Введите BookDBEJB в поле Remote.
8. Введите BookDBEJB в поле JNDI Name.
11. Разверните приложение. Выберите Tools->Deploy Application или нажмите кнопку Deploy Application. Нажмите Next дважды. Введите BookDBEJB в поле Application->JNDI Name и bookstore2 для context root. Нажмите Next и Finish.
12. Откройте bookstore URL http://<host>:8000/bookstore2/enter.
Смотрите Troubleshooting для помощи с диагностикой общих проблем.
Цикл жизни JSP Page
Страница JSP обслуживает запросы подобно сервлету. Таким образом, цикл жизни и многие особенности JSP pages (в частности динамические аспекты) определены технологией Java Servlet technology, и многое из обсуждаемого в данной главе ссылается на функции, описанные в Java Servlet Technology.
Когда запрос обращается к JSP странице, он обрабатывается специальным сервлетом, который сначала проверяет, старше ли сервлет этой JSP страницы, чем сама JSP page. Если старше, он транслирует эту JSP страницу в класс сервлета и компилирует этот класс. Одно из преимуществ JSP page над сервлетами состоит в том, что процесс «построения» выполняется автоматически.
Трансляция и компиляция
На этапе трансляции каждый тип данных в JSP page интерпретируется по разному. Исходные данные трансформируются в код, который будет выделять данные в поток, возвращающий данные клиенту. JSP элементы интерпретируются следующим образом:
· Директивы используются, чтобы контролировать, как web контейнер транслирует и выполняет JSP страницу.
· Скриптовые элементы (Scripting elements) вставляются в класс сервлета JSP страницы. Подробности смотрите в JSP Scripting Elements.
· Элементы форм <jsp:XXX . /> конвертируются в метод, вызывающий компоненты JavaBeans или вызовы Java Servlet API.
Для JSP страницы, названной pageName, исходный текст сервлета JSP страницы servlet хранится в файле:
J2EE_HOME/repository/host/web/context root/pageName_jsp.java
Например, исходный текст для страницы с именем index (index.jsp) для примера локализации даты, обсуждаемого в начале главы, был бы назван:
J2EE_HOME/repository/host/web/date/index_jsp.java
Этапы трансляции и компиляции могут выдавать ошибки, которые наблюдаются, только когда страница запрашивается в первый раз. Если ошибка встречается во время трансляции страницы (например, если транслятор встречает плохо сформированный JSP элемент) сервер выбросит ParseException, и исходный файл класса сервлета будет пустым или неполным. Последняя некомплектная строка укажет на некорректный JSP элемент.
Если ошибка встречается во время компиляции (например, ошибка синтаксиса в скриплете), сервер вернет JasperException и сообщение, которое содержит имя сервлета JSP страницы и строку, в которой встретилась ошибка.
Если страница была оттранслирована и откомпилирована, полученный сервлет в основном следует циклу жизни обычного сервлета, описанному в
Servlet Life Cycle:
1. Если экземпляр сервлета JSP страницы еще не создан, контейнер:
1. Загружает класс сервлета JSP страницы
2. Устанавливает экземпляр класса сервлета
3. Инициализирует экземпляр сервлета, вызывая метод jspInit
2. Вызывает метод _jspService, передавая объекты запроса и ответа.
Если контейнеру необходимо удалить этот сервлет JSP страницы, он вызывает метод jspDestroy.