JSP неявни обекти
⚡ Умно обобщение
JSP имплицитните обекти са предварително дефинирани променливи, които контейнерът на сървлетите създава автоматично по време на преобразуването на страница, което позволява на разработчиците да имат достъп до изходни потоци, заявки, отговори, сесии и данни от приложенията директно в страницата, без ръчно деклариране или допълнителна конфигурация.
Какво е имплицитен JSP обект?
- Неявните JSP обекти се създават по време на фазата на превод на JSP към сървлета.
- Тези обекти могат да се използват директно в скриптове, които влизат в метода на услугата.
- Те се създават автоматично от контейнера и могат да бъдат достъпни чрез обекти.
Колко имплицитни обекта са налични в JSP?
В контейнера има 9 вида имплицитни обекти:
- от
- Поискайте
- Отговор
- Config
- Приложение
- Сесия
- PageContext
- страница
- изключение
Да учим един по един
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 се използва за отпечатване в изходния поток
Когато изпълним горния код, получаваме следния изход:
Изход:
- В изхода получаваме стойностите на 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 (където се извършва действието)
Обяснение на кода:
Code Ред 10-13: В implicit_jsp2.jsp(form) се изпраща заявка, следователно потребителското име на променливата се обработва и изпраща на guru.jsp, което е действие на JSP.
Guru.jsp
Code Ред 10-11: Това е действие 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 на сървлета)
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, което ще ни помогне да получим името на сървлета.
Когато изпълните горния код, получавате следния изход:
Изход:
- Името на сървлета е „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: Получаваме стойността на потребителския атрибут от обекта на сесията и показваме тази стойност
Когато изпълните горния код, получавате следния изход:
Когато щракнете върху връзката за потребителското име. Ще получите следния изход.
Изход:
- Когато щракнем върху връзката, дадена в 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
Когато изпълните горния код, получавате следния изход:
Изход:
- Резултатът ще отпечата „името на ученика е 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 страница
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.
Изход:
Получаваме ArrayIndexOfBoundsException в масива, където получаваме масив num1 от петия елемент.












