JSP жизнен цикъл

Какво е JSP LifeCycle?
Жизненият цикъл на 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 servlet файл се генерира от 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>
Code Обяснение за Demo.jsp
Code Line 1: html начален етикет
Code Line 2: Етикет за глава
Code Ред 3 – 4: Заглавен етикет, т.е. демонстрационен JSP и затварящ заглавен етикет
Code Ред 5 – 6: Скриптлет таг, в който се инициализира демонстрацията на променливата
Code Ред 7 – 8: В етикета body, текст, който да бъде отпечатан в изхода (Броят е: )
Code Ред 9: Етикет на скрипт, където се опитва да отпечата променливата demovar с увеличена стойност
Code Ред 10 – 11: Етикетите Body и HTML са затворени
Демонстрационната JSP страница се преобразува в demo_jsp сървлет в кода по-долу.
Code обяснение за Demo_jsp.java
Code Line 1: Servlet клас demo_jsp разширява родителския клас HttpServlet
Code Ред 2 – 3: Замяна на метода на услугата на jsp, т.е. _jspservice, който има HttpServletRequest и HttpServletResponse обекти като свои параметри
Code Line 4: Метод на отваряне
Code Line 5: Извикване на метода getWriter() обект на отговор, за да се получи PrintWriterобект (отпечатва форматирано представяне на обекти в текстов изходен поток)
Code Line 6: Извикване на метод setContentType на обект на отговор за задаване на типа съдържание
Code Line 7: Използвайки write() метод на печатWriter обект, опитващ се да анализира HTML
Code Line 8: Инициализиране на променливата demovar до 0
Code Line 9: Обаждане write() метод на печатWriter обект за анализиране на текста
Code Line 10: Обаждане print() метод на печатWriter обект за увеличаване на променливата demovar от 0+1=1. Следователно, изходът ще бъде 1
Code Line 11: Използвайки write() метод на печатWriter обект, опитващ се да анализира HTML
Изход:
- Тук можете да видите, че на екранната снимка изходът е 1, тъй като demvar се инициализира на 0 и след това се увеличава на 0+1=1
В горния пример,
- demo.jsp, е JSP, където една променлива се инициализира и увеличава. Този JSP се преобразува в сервлет (demo_jsp.class), където JSP машината зарежда JSP страницата и преобразува в съдържание на сервлет.
- Когато преобразуването се случи, целият текст на шаблона се преобразува в
println()изявления и всичко останало JSP елементи се преобразуват в Java код.
Ето как една проста JSP страница се превежда в сервлет клас.
2) Компилация на JSP страницата
- Генерираният java servlet файл се компилира в java servlet клас
- Преводът на изходната страница на 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()метод, когато извършваме каквото и да е почистване, като например освобождаване на връзки към база данни или затваряне на отворени файлове.



