Життєвий цикл 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 файл сервлету генерується з вихідного файлу 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: Тег сценарію, який ініціалізує демонстраційну змінну
Кодовий рядок 7 – 8: у тегу body, текст, який буде надруковано у вихідних даних (кількість: )
Рядок коду 9: Тег сценарію, який намагається надрукувати змінну demovar із збільшеним значенням
Кодовий рядок 10 – 11: Теги Body та 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: Ініціалізація змінної demovar до 0
Рядок коду 9: Телефоную write()
метод об’єкта PrintWriter для аналізу тексту
Рядок коду 10: Телефоную print()
метод об’єкта PrintWriter для збільшення змінної demovar від 0+1=1. Отже, результат буде 1
Рядок коду 11: Використання write()
метод об’єкта PrintWriter, який намагається розібрати html
вихід:
- Тут ви бачите, що на скріншоті результат дорівнює 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()
метод, коли ми виконуємо будь-яке очищення, наприклад розблокування підключень до бази даних або закриття відкритих файлів.