JSP неявни обекти

⚡ Умно обобщение

JSP имплицитните обекти са предварително дефинирани променливи, които контейнерът на сървлетите създава автоматично по време на преобразуването на страница, което позволява на разработчиците да имат достъп до изходни потоци, заявки, отговори, сесии и данни от приложенията директно в страницата, без ръчно деклариране или допълнителна конфигурация.

  • 🖨️ Изходен обект: Записва данни в буфера и изпраща изхода към клиента чрез JSPWriter поток.
  • 📥 Обект на заявката: Екземпляр на HttpServletRequest, който извлича параметри, заглавки и данни за сървъра, използвайки getParameter().
  • 📤 Обект на отговор: Внедрява HttpServletResponse, за да зададе типа съдържание, да добави „бисквитки“ и да пренасочи клиента.
  • Конфигурация и приложение: Config чете параметрите за инициализация от web.xml; Приложението споделя контекстни данни в цялото внедряване.
  • 🗂️ Сесия и контекст на страницата: Сесията запазва потребителските атрибути между страниците; PageContext управлява атрибутите в обхвата на страница, заявка, сесия и приложение.
  • ⚠️ Обект на изключение: Обект Throwable, достъпен само на страници за грешки, който отчита грешки по време на изпълнение, като например ArrayIndexOutOfBounds.

Какво е имплицитен JSP обект?

  • Неявните JSP обекти се създават по време на фазата на превод на JSP към сървлета.
  • Тези обекти могат да се използват директно в скриптове, които влизат в метода на услугата.
  • Те се създават автоматично от контейнера и могат да бъдат достъпни чрез обекти.

Колко имплицитни обекта са налични в JSP?

В контейнера има 9 вида имплицитни обекти:

  1. от
  2. Поискайте
  3. Отговор
  4. Config
  5. Приложение
  6. Сесия
  7. PageContext
  8. страница
  9. изключение

Да учим един по един

1) Навън

  • 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() като параметър
  • „Обект за отговор“ ще бъде създаден от контейнера за всяка заявка.
  • Представлява отговора, който може да бъде даден на клиента
  • Неявният обект на отговора се използва за тип на съдържание, добавяне на бисквитка и пренасочване към страницата за отговор

Пример:

<%@ 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

Изход:

  • Името на сървлета е „Guru„Servlet“, както името присъства в 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 вида:

  • страница
  • Поискайте
  • Сесия
  • Приложение

Пример:

<%@ 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 страница.

Пример:

В този пример използваме обект на страница, за да получим името на страницата с помощта на метода 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 от петия елемент.

Въпроси и Отговори

Не. Контейнерът създава всичките девет имплицитни обекта автоматично по време на фазата на превод. Разработчиците могат да ги използват директно в скриптлети и метода на услугата, без да импортират пакети или да декларират каквито и да било променливи.

Не. Имплицитните обекти са достъпни само в скриптлети и изрази, които се съпоставят с метода на услугата. Те не могат да се използват в тагове за декларации на JSP, които генерират членове на ниво клас извън този метод.

PageContext работи във всичките четири области – страница, заявка, сесия и приложение. Той предоставя методи setAttribute, getAttribute и removeAttribute, което го прави най-гъвкавият имплицитен обект за управление на данни в различни нива на обхват.

Изкуственият интелект може да обясни всеки имплицитен обект с примери, да конвертира скриптлет код в по-чисти алтернативи и да отговаря мигновено на въпроси относно обхвата. Това помага на начинаещите да разберат кога да използват правилно обектите на заявка, сесия или приложение.

Да. Инструментите с изкуствен интелект могат да генерират работещи JSP фрагменти, използвайки out, request, session и други имплицитни обекти, след което да обяснят всеки ред. Разработчиците все пак трябва да прегледат изхода за правилното обработване на обхвата и сигурността.

Обобщете тази публикация с: