Жизненный цикл JSP
Что такое жизненный цикл JSP?
Жизненный цикл JSP определяется как преобразование страницы JSP в сервлет, поскольку страницу JSP необходимо сначала преобразовать в сервлет, чтобы обработать запросы на обслуживание. Жизненный цикл начинается с создания JSP и заканчивается его распадом.
Различные фазы жизненного цикла JSP
Когда браузер запрашивает JSP, механизм JSP сначала проверяет, нужно ли ему компилировать страницу. Если JSP компилируется последним или в JSP внесены последние изменения, то механизм JSP компилирует страницу.
Процесс компиляции страницы JSP включает в себя три этапа:
- Парсинг JSP
- Превращение JSP в сервлет
- Компиляция сервлета
Диаграмма жизненного цикла JSP
Жизненный цикл JSP изображен на диаграмме ниже.
Следующие шаги объясняют жизненный цикл JSP:
- Перевод страницы JSP
- Компиляция страницы JSP (компиляция страницы JSP в _jsp.java)
- Загрузка классов (_jsp.java преобразуется в файл класса _jsp.class)
- Создание экземпляра (создается объект сгенерированного сервлета)
- Инициализация(
_jspinit()
метод вызывается контейнером) - Обработка запроса(
_jspservice()
метод вызывается контейнером) - Разрушать (
_jspDestroy()
метод, вызываемый контейнером)
Давайте более подробно изложим вышеизложенные пункты:
1) Перевод страницы JSP:
A Java Файл сервлета создается из исходного файла JSP. Это первый шаг жизненного цикла JSP. На этапе перевода контейнер проверяет синтаксическую правильность файлов страниц и тегов JSP.
- Контейнер JSP интерпретирует стандартные директивы и действия, а также пользовательские действия, ссылающиеся на библиотеки тегов (все они являются частью страницы JSP и будут обсуждаться в следующем разделе), используемые на этой странице JSP.
- В приведенном выше графическом описании demo.jsp на первом этапе преобразуется в demo_jsp.java.
- Давайте возьмем пример «demo.jsp», как показано ниже:
Демо.jsp
<html> <head> <title>Demo JSP</title> </head> <% int demvar=0;%> <body> Count is: <% Out.println(demovar++); %> <body> </html>
Объяснение кода для Demo.jsp
Строка кода 1: открывающий тег HTML
Строка кода 2: тег заголовка
Строка кода 3–4: Тег заголовка, т. е. демонстрационный JSP и закрывающий тег заголовка.
Строка кода 5–6: Тег скриптлета, в котором инициализируется демонстрационная переменная.
Строка кода 7–8: В теге body текст, который будет напечатан на выходе (Count: ).
Строка кода 9: Тег скриптлета, в котором пытается напечатать переменную демовар с увеличенным значением
Строка кода 10–11: Теги тела и HTML закрыты.
Демонстрационная страница JSP преобразуется в сервлет demo_jsp в приведенном ниже коде.
Объяснение кода для Demo_jsp.java
Строка кода 1: Класс сервлета demo_jsp расширяет родительский класс HttpServlet.
Строка кода 2–3: Переопределение метода службы jsp, т.е. _jspservice, который имеет в качестве параметров объекты HttpServletRequest и HttpServletResponse.
Строка кода 4: Способ открытия
Строка кода 5: вызов метода getWriter()
объекта ответа для получения объекта PrintWriteobject (печатает форматированное представление объектов в поток вывода текста)
Строка кода 6: Вызов метода setContentType объекта ответа для установки типа контента.
Строка кода 7: С помощью write()
метод объекта PrintWriter, пытающийся проанализировать HTML
Строка кода 8: Инициализация переменной демовара значением 0.
Строка кода 9: Вызов write()
метод объекта PrintWriter для анализа текста
Строка кода 10: Вызов print()
метод объекта PrintWriter для увеличения переменной demovar с 0+1=1. Следовательно, результат будет равен 1.
Строка кода 11: С помощью write()
метод объекта PrintWriter, пытающийся проанализировать HTML
Вывод:
- Здесь вы можете видеть, что на скриншоте выход равен 1, потому что demvar инициализируется значением 0, а затем увеличивается до 0+1=1.
В приведенном выше примере
- demo.jsp — это JSP, в котором инициализируется и увеличивается одна переменная. Этот JSP преобразуется в сервлет (demo_jsp.class), в котором механизм JSP загружает страницу JSP и преобразует в содержимое сервлета.
- Когда происходит преобразование, весь текст шаблона преобразуется в
println()
заявления и все JSP-элементы преобразованы в Java код.
Вот как простая страница JSP преобразуется в класс сервлета.
2) Компиляция страницы JSP
- Сгенерированный файл сервлета Java компилируется в класс сервлета Java.
- Трансляция исходной страницы Java в класс ее реализации может произойти в любой момент между развертыванием страницы JSP в контейнер и обработкой страницы JSP.
- В приведенном выше графическом описании demo_jsp.java скомпилировано в файл класса demo_jsp.class.
3) Загрузка классов
- Класс сервлета, загруженный из источника JSP, теперь загружается в контейнер.
4) Создание экземпляра
- На этом этапе создается объект, то есть экземпляр класса.
- Контейнер управляет одним или несколькими экземплярами этого класса в ответ на запросы и другие события. Обычно контейнер JSP создается с использованием контейнера сервлетов. Контейнер JSP является расширением контейнера сервлетов, поскольку и контейнер поддерживает JSP, и сервлет.
- Интерфейс JSPPage, предоставляемый контейнером, обеспечивает
init()
иdestroy()
методы. - Существует интерфейс HttpJSPPage, который обслуживает HTTP-запросы, а также содержит метод службы.
5) Инициализация
public void jspInit() { //initializing the code }
_jspinit()
Метод инициирует экземпляр сервлета, созданный из JSP, и будет вызываться контейнером на этом этапе.- Как только экземпляр будет создан, сразу после этого будет вызван метод init.
- Он вызывается только один раз в течение жизненного цикла JSP, метод инициализации объявляется, как показано выше.
6) Обработка запросов
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
_jspservice()
метод вызывается контейнером для всех запросов, создаваемых страницей JSP в течение ее жизненного цикла.- На этом этапе он должен пройти все вышеперечисленные этапы, после чего можно вызвать только метод службы.
- Он передает объекты запроса и ответа
- Этот метод нельзя переопределить
- Метод показан выше: он отвечает за генерацию всех методов HTTP, т.е. GET, POST и т. д.
7) Уничтожить
public void _jspdestroy() { //all clean up code }
_jspdestroy()
метод также вызывается контейнером- Этот метод вызывается, когда контейнер решает, что экземпляр сервлета ему больше не нужен для обслуживания запросов.
- Когда выполняется вызов метода уничтожения, сервлет готов к сборке мусора.
- Это конец жизненного цикла.
- Мы можем переопределить
jspdestroy()
метод, когда мы выполняем любую очистку, например, освобождаем соединения с базой данных или закрываем открытые файлы.