Java-online.ru - все о Java


Java Server Page. Жизненный цикл страницы JSP

Страница JSP обслуживает запросы, как сервлет. Следовательно, жизненный цикл и многие возможности страниц JSP (в частности, динамические аспекты) определяются технологией Java Servlet и многие обсуждения в этой главе ссылаются на функции, описанные в разделе cервлетов. Когда запрос отображается на страницу JSP, он обрабатывается специальным сервлетом, который сначала проверяет, не старше ли сервлет страницы JSP, чем сама страница JSP. Если это так, он переводит страницу JSP в класс сервлета и компилирует класс. При разработке Web-приложения одним из преимуществ страниц JSP перед сервлетами является то, что процесс построения (компиляции страницы JSP в сервлет) выполняется автоматически.

Трансляция и компиляция

На фазе трансляции каждый тип данных в странице JSP интерпретируется отдельно. Шаблонные данные трансформируются в код, который будет помещать данные в поток, возвращающий данные клиенту. Элементы JSP трактуются следующим образом:
  • директивы, используемые для управления тем, как Web-контейнер переводит и выполняет страницу JSP;
  • скриптовые элементы вставляются в класс сервлета страницы JSP;
  • элементы в форме <jsp:XXX ... /> конвертируются в вызов метода для компонентов JavaBeans или вызовы API Java Servlet.
И фаза трансляции, и фаза компиляции могут порождать ошибки, которые будут выведены только, когда страница будет в первый раз запрошена. Если ошибка возникает при трансляции страницы (например, транслятор находит элемент JSP с неправильным форматом), сервер возвращает ParseException, и исходный файл класса сервлета будет пустым или незаконченным. Последняя незаконченная строка дает указатель на неправильный элемент JSP. Если ошибка возникает при компиляции страницы (например, синтаксическая ошибка в скриптлете), сервер возвращает JasperException и сообщение, которое включает в себя имя сервлета страницы JSP и строку, в которой произошла ошибка.

Когда страница оттранслирована и откомпилирована, сервлет страницы JSP в основном следует жизненному циклу сервлета, описанному в разделе Жизненный цикл сервлета :
  1. Если экземпляр сервлета страницы JSP не существует, контейнер:
    • загружает класс сервлета страницы JSP;
    • создает экземпляр класса сервлета;
    • инициализирует экземпляр сервлета вызовом метода jspInit.
  2. Вызывает метод _jspService, передавая ему объекты запроса и отклика.
Если контейнеру нужно удалить сервлет страницы JSP, он вызывает метод jspDestroy.

Выполнение страницы JSP

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

При выполнении страницы JSP может возникать любое число исключений. Чтобы определить, что Web-контейнер должен передавать управление странице ошибки, если происходит исключение, необходимо определить в странице JSP следующую директиву page:

  <%@ page errorPage="file_name" %>
  



Copyright © 2009-2015