Учебники

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

Что такое JSP LifeCycle?

Жизненный цикл 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. Instantiation (Объект сгенерированного сервлета создан)
  5. Инициализация (метод _jspinit () вызывается контейнером)
  6. Обработка запросов (метод _jspservice () вызывается контейнером)
  7. Destroy (метод _jspDestroy (), вызываемый контейнером)

Позвольте нам иметь более подробное резюме по вышеуказанным пунктам:

  1. Перевод страницы JSP:

А Java сервлетов файл создается из исходного файла JSP. Это первый шаг жизненного цикла JSP. На этапе перевода контейнер проверяет синтаксическую правильность страницы JSP и файлов тегов.

  • Контейнер JSP интерпретирует стандартные директивы и действия, а также настраиваемые действия, ссылающиеся на библиотеки тегов (все они являются частью страницы JSP и будут обсуждаться в следующем разделе), используемые на этой странице JSP.
  • В приведенном выше графическом описании demo.jsp переводится в demo_jsp.java на первом этапе.
  • Давайте возьмем пример «demo.jsp», как показано ниже:

Demo.jsp

  1. <html>
  2. <head>
  3. <title>Demo JSP</title>
  4. </head>
  5. <%
  6. int demvar=0;%>
  7. <body>
  8. Count is:
  9. <% Out.println(demovar++); %>
  10. <body>
  11. </html>

Объяснение кода для Demo.jsp

Строка кода 1 : HTML начальный тег

Строка кода 2 : метка головы

Строка кода 3 — 4 : тег заголовка, т.е. демонстрационный JSP и тег заголовка закрытия

Строка кода 5,6 : тег Scriptlet, в котором инициализируется переменная demo

Строка кода 7 — 8 : в теге body текст, который будет напечатан на выходе (Count: 🙂

Строка кода 9: тег Scriplet, в котором пытаются распечатать переменную demovar с увеличенным значением

Строка кода 10-11: тело и HTML-теги закрыты

Демонстрационная страница JSP преобразуется в сервлет demo_jsp в следующем коде.

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

Объяснение кода для Demo_jsp.java

Строка кода 1 : класс сервлета demo_jsp расширяет родительский класс HttpServlet

Строка кода 2,3 : переопределение метода обслуживания jsp, т.е. _jspservice, в котором в качестве параметров используются объекты HttpServletRequest и HttpServletResponse

Строка кода 4 : метод открытия

Строка кода 5 : вызов метода getWriter () объекта ответа для получения PrintWriterobject (печатает отформатированное представление объектов в поток вывода текста)

Строка кода 6 : вызов метода setContentType объекта ответа для установки типа контента

Строка кода 7. Использование метода write () объекта PrintWriter при попытке анализа html

Строка кода 8 : инициализация переменной демовара в 0

Строка кода 9 : вызов метода write () объекта PrintWriter для разбора текста

Строка кода 10 : вызов метода print () объекта PrintWriter для увеличения значения переменной demovar с 0 + 1 = 1. Таким образом, вывод будет равен 1

Строка кода 11. Использование метода write () объекта PrintWriter при попытке анализа html

Вывод:

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

  • Здесь вы можете видеть, что на снимке экрана theOutput равен 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-запросы, а также содержит метод service.
  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-методов i.eGET, POST и т. Д.
  1. уничтожить
    public void _jspdestroy()
    {
                //all clean up code
    }
  • Метод _jspdestroy () также вызывается контейнером
  • Этот метод вызывается, когда контейнер решает, что ему больше не нужен экземпляр сервлета для обслуживания запросов.
  • Когда вызывается метод уничтожения, сервлет готов к сборке мусора.
  • Это конец жизненного цикла.
  • Мы можем переопределить метод jspdestroy (), когда выполняем любую очистку, такую ​​как освобождение соединений с базой данных или закрытие открытых файлов.