Жизненный цикл JSP: введение, этапы, методы

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

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

Давайте изучим различные фазы жизненного цикла JSP.

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

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

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

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

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

Фоллоwing шаги объясняют жизненный цикл 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 преобразуется в класс сервлета.

  1. Компиляция страницы JSP
  • Сгенерированный файл сервлета Java компилируется в класс сервлета Java.
  • Трансляция исходной страницы Java в класс ее реализации может произойти в любой момент между развертыванием страницы JSP в контейнер и обработкой страницы JSP.
  • В приведенном выше графическом описании demo_jsp.java скомпилировано в файл класса demo_jsp.class.
  1. Загрузка классов
  • Класс сервлета, загруженный из источника JSP, теперь загружается в контейнер.
  1. Конкретизация
  • На этом этапе создается объект, то есть экземпляр класса.
  • Контейнер управляет одним или несколькими экземплярами этого класса в ответ на запросы и другие события. Обычно контейнер JSP создается с использованием контейнера сервлетов. Контейнер JSP является расширением контейнера сервлетов, поскольку и контейнер поддерживает JSP, и сервлет.
  • Интерфейс JSPPage, предоставляемый контейнером, предоставляет методы init() и Destroy().
  • Существует интерфейс HttpJSPPage, который обслуживает HTTP-запросы, а также содержит метод службы.
  1. Инициализация
    public void jspInit()
    {
    	//initializing the code
    }
  • Метод _jspinit() инициирует экземпляр сервлета, созданный из JSP, и будет вызываться контейнером на этом этапе.
  • Как только экземпляр будет создан, сразу после этого будет вызван метод init.
  • Он вызывается только один раз в течение жизненного цикла JSP, метод инициализации объявляется, как показано выше.
  1. Обработка запроса
    void _jspservice(HttpServletRequest request HttpServletResponse response)
    {
    	//handling all request and responses
    }
  • Метод _jspservice() вызывается контейнером для всех запросов, создаваемых страницей JSP в течение ее жизненного цикла.
  • На этом этапе он должен пройти все вышеперечисленные этапы, после чего можно вызвать только метод службы.
  • Он передает объекты запроса и ответа
  • Этот метод нельзя переопределить
  • Метод показан выше: он отвечает за генерацию всех методов HTTP, т.е. eGET, POST и т. д.
  1. Уничтожить
    public void _jspdestroy()
    {
                //all clean up code
    }
  • Метод _jspdestroy() также вызывается контейнером.
  • Этот метод вызывается, когда контейнер решает, что экземпляр сервлета ему больше не нужен для обслуживания запросов.
  • Когда выполняется вызов метода уничтожения, сервлет готов к сборке мусора.
  • Это конец жизненного цикла.
  • Мы можем переопределить метод jspdestroy() при выполнении любой очистки, например при освобождении подключений к базе данных или закрытии открытых файлов.