Неявні об’єкти JSP
Що таке неявний об’єкт JSP?
- Неявні об’єкти JSP створюються під час фази перекладу JSP на сервлет.
- Ці об’єкти можна безпосередньо використовувати в сценаріях, які входять у метод служби.
- Вони створюються контейнером автоматично, і до них можна отримати доступ за допомогою об’єктів.
Скільки неявних об’єктів доступно в JSP?
У контейнері доступні 9 типів неявних об’єктів:
- З
- Запит
- відповідь
- конфиг
- додаток
- Session
- PageContext
- сторінка
- Виняток
Давайте вивчати один за одним
1) Вийти
- Out — один із неявних об’єктів для запису даних у буфер і надсилання вихідних даних клієнту у відповідь
- Об’єкт Out дозволяє отримати доступ до вихідного потоку сервлета
- Out є об’єктом класу javax.servlet.jsp.jspWriter
- Під час роботи з сервлет, нам потрібен об’єкт 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>
Пояснення коду:
Рядок коду 11-12– out використовується для друку у вихідний потік
Коли ми виконуємо наведений вище код, ми отримуємо наступний результат:
вихід:
- У вихідних даних ми отримуємо значення 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 (де виконується дія)
Пояснення коду:
Рядок коду 10-13: У implicit_jsp2.jsp(form) надсилається запит, тому змінна ім’я користувача обробляється та надсилається до guru.jsp, що є дією JSP.
Guru.jsp
Рядок коду 10-11: Це дія 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>
Пояснення коду:
Рядок коду 11: В об’єкті відповіді ми можемо встановити тип вмісту
Тут ми встановлюємо лише тип вмісту в об’єкті відповіді. Отже, для цього немає результату.
4) Конфігурація
- «Конфігурація» має тип java.servlet.servletConfig
- Він створюється контейнером для кожної сторінки jsp
- Він використовується для отримання параметра ініціалізації в web.xml
приклад:
Web.xml (вказує назву та відображення сервлета)
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
Рядок коду 14-17: У web.xml ми маємо відображення сервлетів у класи.
Implicit_jsp5.jsp
Рядок коду 10-11: Щоб отримати назву сервлета в JSP, ми можемо використати config.getServletName, який допоможе нам отримати назву сервлета.
Коли ви виконуєте наведений вище код, ви отримуєте такий результат:
вихід:
- Сервлет має назву «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
Рядок коду 11: ми встановлюємо атрибут user у змінній сеансу, і це значення можна отримати із сеансу, у якому б jsp не було викликано з цього (_jsp8.jsp).
Рядок коду 12: Ми викликаємо інший jsp на href, у якому ми отримаємо значення для встановленого атрибута user.
Implicit_jsp8.jsp
Рядок коду 11: Ми отримуємо значення атрибута користувача з об’єкта сеансу та відображаємо це значення
Коли ви виконуєте наведений вище код, ви отримуєте такий результат:
Коли ви натискаєте на посилання для імені користувача. Ви отримаєте наступний результат.
вихід:
- Коли ми клацаємо посилання, надане в 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>
Пояснення коду:
Рядок коду 11: ми встановлюємо атрибут за допомогою об’єкта pageContext, і він має три параметри:
- ключ
- значення
- Сфера
У наведеному вище коді ключ — student, а значення — «gurustudent», а область — це область сторінки. Тут область дії – «сторінка», і її можна отримати лише за допомогою області видимості сторінки.
Рядок коду 12: Ми отримуємо значення атрибута за допомогою pageContext
Коли ви виконуєте наведений вище код, ви отримуєте такий результат:
вихід:
- На виході буде надруковано «ім’я студента 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>
Пояснення коду:
Рядок коду 10-11: У цьому прикладі ми намагаємося використати метод toString() об’єкта сторінки та намагаємося отримати назву рядка сторінки 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>
Пояснення коду:
Рядок коду 10-12 – Він містить масив чисел, тобто num1 із чотирьох елементів. У вихідних даних ми намагаємося надрукувати п’ятий елемент масиву з num1, який не оголошений у списку масивів. Тому він використовується для отримання об’єкта винятку jsp.
вихід:
Ми отримуємо ArrayIndexOfBoundsException у масиві, де ми отримуємо масив num1 п’ятого елемента.