Что такое JSP LifeCycle?
Жизненный цикл JSP определяется как перевод Страницы JSP в сервлет, так как Страница JSP должна быть сначала преобразована в сервлет для обработки запросов на обслуживание. Жизненный цикл начинается с создания JSP и заканчивается распадом этого.
Давайте изучим различные фазы жизненного цикла JSP
Когда браузер запрашивает JSP, механизм JSP сначала проверяет, нужно ли ему компилировать страницу. Если JSP последний раз компилируется или в JSP выполняется последняя модификация, то JSP-движок компилирует страницу.
Процесс компиляции JSP-страницы включает три этапа:
- Разбор JSP
- Превращение JSP в сервлет
- Компиляция сервлета
Жизненный цикл JSP изображен на диаграмме ниже.
Следующие шаги объясняют жизненный цикл JSP:
- Перевод страницы JSP
- Компиляция страницы JSP (Компиляция страницы JSP в _jsp.java)
- Загрузка классов (_jsp.java преобразуется в файл класса _jsp.class)
- Instantiation (Объект сгенерированного сервлета создан)
- Инициализация (метод _jspinit () вызывается контейнером)
- Обработка запросов (метод _jspservice () вызывается контейнером)
- Destroy (метод _jspDestroy (), вызываемый контейнером)
Позвольте нам иметь более подробное резюме по вышеуказанным пунктам:
- Перевод страницы JSP:
А Java сервлетов файл создается из исходного файла JSP. Это первый шаг жизненного цикла JSP. На этапе перевода контейнер проверяет синтаксическую правильность страницы JSP и файлов тегов.
- Контейнер JSP интерпретирует стандартные директивы и действия, а также настраиваемые действия, ссылающиеся на библиотеки тегов (все они являются частью страницы JSP и будут обсуждаться в следующем разделе), используемые на этой странице JSP.
- В приведенном выше графическом описании demo.jsp переводится в demo_jsp.java на первом этапе.
- Давайте возьмем пример «demo.jsp», как показано ниже:
Demo.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 : тег Scriptlet, в котором инициализируется переменная demo
Строка кода 7 — 8 : в теге body текст, который будет напечатан на выходе (Count: ?
Строка кода 9: тег Scriplet, в котором пытаются распечатать переменную demovar с увеличенным значением
Строка кода 10-11: тело и HTML-теги закрыты
Демонстрационная страница JSP преобразуется в сервлет demo_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
Вывод:
- Здесь вы можете видеть, что на снимке экрана theOutput равен 1, потому что demvar инициализируется в 0, а затем увеличивается до 0 + 1 = 1
В приведенном выше примере
- demo.jsp, это JSP, где одна переменная инициализируется и увеличивается. Этот JSP преобразуется в сервлет (demo_jsp.class), в котором механизм JSP загружает страницу JSP и преобразует в содержимое сервлета.
- Когда происходит преобразование, весь текст шаблона преобразуется в операторы println (), а все элементы JSP преобразуются в код Java.
Вот как простая страница JSP переводится в класс сервлета.
- Компиляция страницы JSP
- Сгенерированный файл сервлета Java скомпилирован в класс сервлета Java
- Перевод исходной страницы Java в класс ее реализации может происходить в любое время между развертыванием страницы JSP в контейнере и обработкой страницы JSP.
- В приведенном выше графическом описании demo_jsp.java компилируется в файл класса demo_jsp.class
- загрузки классов
- Класс сервлета, который был загружен из источника JSP, теперь загружен в контейнер
- Конкретизация
- На этом этапе создается объект, т.е. экземпляр класса.
- Контейнер управляет одним или несколькими экземплярами этого класса в ответе на запросы и другие события. Как правило, контейнер JSP создается с использованием контейнера сервлета. Контейнер JSP является расширением контейнера сервлета, так как оба контейнера поддерживают JSP и сервлет.
- Интерфейс JSPPage, предоставляемый контейнером, предоставляет методы init () и destroy ().
- Существует интерфейс HttpJSPPage, который обслуживает HTTP-запросы, а также содержит метод service.
- инициализация
public void jspInit() { //initializing the code }
- Метод _jspinit () инициирует экземпляр сервлета, который был сгенерирован из JSP, и будет вызываться контейнером на этом этапе.
- Как только экземпляр будет создан, метод init будет вызван сразу после этого
- Он вызывается только один раз в течение жизненного цикла JSP, метод инициализации объявлен, как показано выше
- Обработка запросов
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
- Метод _jspservice () вызывается контейнером для всех запросов, вызванных страницей JSP в течение ее жизненного цикла.
- Для этого этапа он должен пройти все вышеуказанные этапы, и тогда может быть вызван только метод обслуживания.
- Он передает объекты запроса и ответа.
- Этот метод не может быть переопределен
- Метод показан выше: он отвечает за генерацию всех HTTP-методов i.eGET, POST и т. Д.
- уничтожить
public void _jspdestroy() { //all clean up code }
- Метод _jspdestroy () также вызывается контейнером
- Этот метод вызывается, когда контейнер решает, что ему больше не нужен экземпляр сервлета для обслуживания запросов.
- Когда вызывается метод уничтожения, сервлет готов к сборке мусора.
- Это конец жизненного цикла.
- Мы можем переопределить метод jspdestroy (), когда выполняем любую очистку, такую как освобождение соединений с базой данных или закрытие открытых файлов.