Неявні об’єкти JSP

⚡ Розумний підсумок

Неявні об'єкти JSP – це попередньо визначені змінні, які контейнер сервлетів створює автоматично під час перекладу сторінки, дозволяючи розробникам отримувати доступ до вихідних потоків, запитів, відповідей, сеансів та даних програми безпосередньо всередині сторінки без ручного оголошення чи додаткового налаштування.

  • 🖨️ Вихідний об'єкт: Записує дані в буфер і надсилає вивід клієнту через JSPWriter потік.
  • 📥 Об'єкт запиту: Екземпляр HttpServletRequest, який отримує параметри, заголовки та дані сервера за допомогою getParameter().
  • 📤 Об'єкт відповіді: Реалізує HttpServletResponse для встановлення типу вмісту, додавання файлів cookie та перенаправлення клієнта.
  • Конфігурація та застосування: Конфігурація зчитує параметри ініціалізації з web.xml; програма надає доступ до контекстних даних у всьому розгортанні.
  • 🗂️ Сеанс та контекст сторінки: Сеанс зберігає атрибути користувача на всіх сторінках; PageContext керує атрибутами на різних сторінках, запитах, сеансах та застосунках.
  • ⚠️ Об'єкт винятку: Об'єкт Throwable, доступний лише на сторінках помилок, який повідомляє про помилки під час виконання, такі як ArrayIndexOutOfBounds.

Що таке неявний об’єкт JSP?

  • Неявні об’єкти JSP створюються під час фази перекладу JSP на сервлет.
  • Ці об’єкти можна безпосередньо використовувати в сценаріях, які входять у метод служби.
  • Вони створюються контейнером автоматично, і до них можна отримати доступ за допомогою об’єктів.

Скільки неявних об’єктів доступно в JSP?

У контейнері доступні 9 типів неявних об’єктів:

  1. З
  2. Запит
  3. відповідь
  4. конфиг
  5. додаток
  6. Session
  7. PageContext
  8. сторінка
  9. Виняток

Давайте вивчати один за одним

1) Вийти

  • Out — один із неявних об’єктів для запису даних у буфер і надсилання вихідних даних клієнту у відповідь
  • Об’єкт Out дозволяє отримати доступ до вихідного потоку сервлета
  • Out є об'єктом javax.servlet.jsp.jsp.jsWriter клас
  • Під час роботи з сервлет, нам потрібен об’єкт printwriter

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP1</title>
</head>
<body>
<% int num1=10;int num2=20;
out.println("num1 is " +num1);
out.println("num2 is "+num2);
%>
</body>
</html>

Пояснення коду:

Code Рядок 11-12– out використовується для друку у вихідний потік

Коли ми виконуємо наведений вище код, ми отримуємо наступний результат:

Вийшов у JSP

вихід:

  • У вихідних даних ми отримуємо значення num1 і num2

2) Запит

  • Об’єкт запиту є екземпляром java.servlet.http.HttpServletRequest і є одним із аргументів методу служби
  • Він буде створюватися контейнером для кожного запиту.
  • Він використовуватиметься для запиту такої інформації, як параметр, інформація заголовка, ім’я сервера тощо.
  • Він використовує getParameter() для доступу до параметра запиту.

приклад:

Implicit_jsp2.jsp(форма, з якої надсилається запит до guru.jsp)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru form JSP2</title>
</head>
<body>
<form action="guru.jsp">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
</body>
</html>

Guru.jsp (де виконується дія)

Запит в JSP

Пояснення коду:

Code Рядки 10-13: У implicit_jsp2.jsp(form) надсилається запит, тому змінна ім’я користувача обробляється та надсилається до guru.jsp, що є дією JSP.

Guru.jsp

Code Рядки 10-11: Це дія jsp, де запит обробляється, а ім’я користувача береться з форми jsp.

Коли ви виконуєте наведений вище код, ви отримуєте наступний результат

вихід:

Запит в JSP

Коли ви пишете тест і натискаєте кнопку «Надіслати», ви отримуєте такий результат «Ласкаво просимо до тесту».

Запит в JSP

3) Відповідь

  • «Відповідь» — це екземпляр класу, який реалізує інтерфейс HttpServletResponse
  • Контейнер генерує цей об’єкт і передає методу _jspservice() як параметр
  • «Об’єкт відповіді» буде створено контейнером для кожного запиту.
  • Він представляє відповідь, яку можна надати клієнту
  • Неявний об’єкт відповіді використовується для введення вмісту, додавання файлів cookie та перенаправлення на сторінку відповіді

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP4</title>
</head>
<body>
<%response.setContentType("text/html"); %>
</body>
</html>

Пояснення коду:

Code Лінія 11: В об’єкті відповіді ми можемо встановити тип вмісту

Тут ми встановлюємо лише тип вмісту в об’єкті відповіді. Отже, для цього немає результату.

4) Конфігурація

  • «Конфігурація» має тип java.servlet.servletConfig
  • Він створюється контейнером для кожної сторінки jsp
  • Він використовується для отримання параметра ініціалізації в web.xml

приклад:

Web.xml (вказує назву та картуping сервлета)

Конфігурація в JSP

Implicit_jsp5.jsp (отримання значення імені сервлета)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP5</title>
</head>
<body>
<% String servletName = config.getServletName();
out.println("Servlet Name is " +servletName);%>
</body>
</html>

Пояснення коду:

У web.xml

Code Рядок 14-17: У web.xml у нас є картаping сервлетів до класів.

Implicit_jsp5.jsp

Code Рядок 10-11: Щоб отримати назву сервлета в JSP, ми можемо використати config.getServletName, який допоможе нам отримати назву сервлета.

Коли ви виконуєте наведений вище код, ви отримуєте такий результат:

Відповідь у JSP

вихід:

  • Ім'я сервлета — «GuruServlet” як назва присутня у web.xml

5) Додаток

  • Об’єкт програми (рядок коду 10) є екземпляром javax.servlet.ServletContext і використовується для отримання контекстної інформації та атрибутів у JSP.
  • Об’єкт програми створюється контейнером по одному для кожної програми під час розгортання програми.
  • Об’єкт Servletcontext містить набір методів, які використовуються для взаємодії з контейнером сервлетів. Ми можемо знайти інформацію про контейнер сервлетів

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Implicit JSP6</title>
</head>
<body>
<% application.getContextPath(); %>
</body>
</html>

Пояснення коду:

  • У наведеному вище коді атрибут програми допомагає отримати контекстний шлях сторінки JSP.

6) Сесія

  • Сеанс містить об’єкт «httpsession» (кодовий рядок 10).
  • Об’єкт сеансу використовується для отримання, встановлення та видалення атрибутів області сеансу, а також для отримання інформації про сеанс

приклад:

Implicit_jsp7 (атрибут встановлено)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit JSP</title>
</head>
<body>
<% session.setAttribute("user","GuruJSP"); %>
<a href="implicit_jsp8.jsp">Click here to get user name</a>
</body>
</html>

Implicit_jsp8.jsp (getAttribute)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>implicit Guru JSP8</title>
</head>
<body>
<% String name = (String)session.getAttribute("user");
out.println("User Name is " +name);
%>
</body>
</html>

Пояснення коду:

Implicit_jsp7.jsp

Code Лінія 11: ми встановлюємо атрибут user у змінній сеансу, і це значення можна отримати із сеансу, у якому б jsp не було викликано з цього (_jsp8.jsp).

Code Лінія 12: Ми викликаємо інший jsp на href, у якому ми отримаємо значення для встановленого атрибута user.

Implicit_jsp8.jsp

Code Лінія 11: Ми отримуємо значення атрибута користувача з об’єкта сеансу та відображаємо це значення

Коли ви виконуєте наведений вище код, ви отримуєте такий результат:

Сесія в JSP

Коли ви натискаєте на посилання для імені користувача. Ви отримаєте наступний результат.

Сесія в JSP

вихід:

  • Коли ми клацаємо посилання, надане в implicit_jsp7.jsp, ми перенаправляємося на другу сторінку jsp, тобто сторінку (_jsp8.jsp), і ми отримуємо значення з об’єкта сеансу атрибута користувача (_jsp7.jsp).

7) Контекст сторінки

  • Цей об’єкт належить до типу pagecontext.
  • Він використовується для отримання, встановлення та видалення атрибутів із певної області

Приціли бувають 4 типів:

  • сторінка
  • Запит
  • Session
  • додаток

приклад:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP9</title>
</head>
<body>
<% pageContext.setAttribute("student","gurustudent",pageContext.PAGE_SCOPE);
String name = (String)pageContext.getAttribute("student");
out.println("student name is " +name);
%>
</body>
</html>

Пояснення коду:

Code Лінія 11: ми встановлюємо атрибут за допомогою об’єкта pageContext, і він має три параметри:

  • ключ
  • значення
  • Сфера

У наведеному вище коді ключ — student, а значення — «gurustudent», а область — це область сторінки. Тут область дії – «сторінка», і її можна отримати лише за допомогою області видимості сторінки.

Code Лінія 12: Ми отримуємо значення атрибута за допомогою pageContext

Коли ви виконуєте наведений вище код, ви отримуєте такий результат:

PageContext в JSP

вихід:

  • На виході буде надруковано «ім’я студента gurustudent».

8) Сторінка

  • Неявна змінна сторінки містить поточний запущений об’єкт сервлета для відповідного jsp.
  • Діє як цей об’єкт для поточної сторінки jsp.

приклад:

У цьому прикладі ми використовуємо об’єкт page, щоб отримати назву сторінки за допомогою методу toString

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP10</title>
</head>
<body>
<% String pageName = page.toString();
out.println("Page Name is " +pageName);%>
</body>
</html>

Пояснення коду:

Code Рядок 10-11: У цьому прикладі ми намагаємося використати метод toString() об’єкта сторінки та намагаємося отримати назву рядка сторінки JSP.

Коли ви виконуєте код, ви отримуєте такий результат:

Сторінка в JSP

вихід:

  • Вихід – це ім’я рядка вищезгаданої сторінки jsp

9) Виняток

  • Винятком є ​​неявний об’єкт класу, що кидається.
  • Він використовується для обробка винятків у JSP.
  • Об’єкт винятку можна використовувати лише на сторінках помилок.приклад:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP 11</title>
</head>
<body>
<%int[] num1={1,2,3,4};
out.println(num1[5]);%>
<%= exception %>
</body>
</html>

Пояснення коду:

Code Рядок 10-12 – Він містить масив чисел, тобто num1 із чотирьох елементів. У вихідних даних ми намагаємося надрукувати п’ятий елемент масиву з num1, який не оголошений у списку масивів. Тому він використовується для отримання об’єкта винятку jsp.

вихід:

Виняток у JSP

Ми отримуємо ArrayIndexOfBoundsException у масиві, де ми отримуємо масив num1 п’ятого елемента.

Поширені запитання

Ні. Контейнер створює всі дев'ять неявних об'єктів автоматично під час фази перекладу. Розробники можуть використовувати їх безпосередньо всередині скриптлетів та методу service без імпорту пакетів чи оголошення будь-яких змінних.

Ні. Неявні об'єкти доступні лише всередині скриптлетів та виразів, що відповідають методу служби. Їх не можна використовувати всередині тегів оголошення JSP, які генерують члени рівня класу поза цим методом.

PageContext працює в усіх чотирьох областях видимості — сторінка, запит, сесія та програма. Він надає методи setAttribute, getAttribute та removeAttribute, що робить його найгнучкішим неявним об'єктом для керування даними на різних рівнях області видимості.

Штучний інтелект може пояснити кожен неявний об'єкт на прикладах, конвертувати код скриптлетів у більш зрозумілі альтернативи та миттєво відповідати на запитання щодо області застосування. Це допомагає новачкам зрозуміти, коли правильно використовувати об'єкти запиту, сеансу або програми.

Так. Інструменти штучного інтелекту можуть генерувати робочі фрагменти JSP, використовуючи out, request, session та інші неявні об'єкти, а потім пояснювати кожен рядок. Розробникам все одно слід перевіряти вивід на предмет правильної обробки області видимості та безпеки.

Підсумуйте цей пост за допомогою: