Жизненный цикл JSP

жизненный цикл jsp

Что такое жизненный цикл JSP?

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

Различные фазы жизненного цикла JSP

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

Процесс компиляции страницы JSP включает в себя три этапа:

  • Парсинг JSP
  • Превращение JSP в сервлет
  • Компиляция сервлета

Диаграмма жизненного цикла JSP

Жизненный цикл JSP изображен на диаграмме ниже.

Жизненный цикл JSP

Следующие шаги объясняют жизненный цикл JSP:

  1. Перевод страницы JSP
  2. Компиляция страницы JSP (компиляция страницы JSP в _jsp.java)
  3. Загрузка классов (_jsp.java преобразуется в файл класса _jsp.class)
  4. Создание экземпляра (создается объект сгенерированного сервлета)
  5. Инициализация(_jspinit() метод вызывается контейнером)
  6. Обработка запроса(_jspservice() метод вызывается контейнером)
  7. Разрушать (_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 в приведенном ниже коде.

Жизненный цикл 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

Вывод:

Жизненный цикл JSP

  • Здесь вы можете видеть, что на скриншоте выход равен 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() метод, когда мы выполняем любую очистку, например, освобождаем соединения с базой данных или закрываем открытые файлы.