Implicitní objekty JSP
Co je implicitní objekt JSP?
- Implicitní objekty JSP se vytvářejí během fáze překladu JSP na servlet.
- Tyto objekty lze přímo použít ve skriptech, které jsou součástí servisní metody.
- Jsou vytvářeny kontejnerem automaticky a lze k nim přistupovat pomocí objektů.
Kolik implicitních objektů je dostupných v JSP?
V kontejneru je k dispozici 9 typů implicitních objektů:
- Ven
- Žádost
- Odpověď
- Config
- editaci videa
- Zasedání
- PageContext
- Strana
- Výjimka
Pojďme studovat Jeden po druhém
1) Ven
- Out je jedním z implicitních objektů pro zápis dat do vyrovnávací paměti a odeslání výstupu klientovi jako odpověď
- Out object nám umožňuje přístup k výstupnímu proudu servletu
- Out je objekt třídy javax.servlet.jsp.jspWriter
- Při práci s servlet, potřebujeme objekt printwriter
Příklad:
<%@ 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>
Vysvětlení kódu:
Řádek kódu 11-12– out se používá k tisku do výstupního proudu
Když spustíme výše uvedený kód, dostaneme následující výstup:
Výstup:
- Ve výstupu dostaneme hodnoty num1 a num2
2) Žádost
- Objekt požadavku je instancí java.servlet.http.HttpServletRequest a je to jeden z argumentů metody služby
- Bude vytvořen kontejnerem pro každý požadavek.
- Bude použit k vyžádání informací, jako je parametr, informace záhlaví, název serveru atd.
- K přístupu k parametru požadavku používá getParameter().
Příklad:
Implicit_jsp2.jsp(formulář, ze kterého je požadavek odeslán na 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 (kde se akce provádí)
Vysvětlení kódu:
Řádek 10–13 kódu: V implicit_jsp2.jsp(form) je odeslán požadavek, proto je proměnná uživatelské jméno zpracována a odeslána na guru.jsp, což je akce JSP.
Guru.jsp
Řádek 10-11 kódu: Je to akce jsp, kde je požadavek zpracován a uživatelské jméno je převzato z formuláře jsp.
Když spustíte výše uvedený kód, získáte následující výstup
Výstup:
Když napíšete test a kliknete na tlačítko Odeslat, získáte následující výstup „Uvítací test“.
3) Odezva
- „Response“ je instance třídy, která implementuje rozhraní HttpServletResponse
- Kontejner vygeneruje tento objekt a předá jej metodě _jspservice() jako parametr
- „Objekt odpovědi“ bude vytvořen kontejnerem pro každý požadavek.
- Představuje odpověď, která může být poskytnuta klientovi
- Implicitní objekt odezvy se používá k typu obsahu, přidání cookie a přesměrování na stránku s odpovědí
Příklad:
<%@ 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>
Vysvětlení kódu:
11. řádek kódu: V objektu odpovědi můžeme nastavit typ obsahu
Zde nastavujeme pouze typ obsahu v objektu odpovědi. Proto pro to neexistuje žádný výstup.
4) Konfigurace
- „Config“ je typu java.servlet.servletConfig
- Je vytvořen kontejnerem pro každou stránku jsp
- Slouží k získání inicializačního parametru ve web.xml
Příklad:
Web.xml (určuje název a mapování servletu)
Implicit_jsp5.jsp (získání hodnoty názvu servletu)
<%@ 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>
Vysvětlení kódu:
V souboru web.xml
Řádek 14–17 kódu: Ve web.xml máme mapování servletů do tříd.
Implicitní_jsp5.jsp
Řádek 10–11 kódu: K získání názvu servletu v JSP můžeme použít config.getServletName, který nám pomůže získat název servletu.
Když spustíte výše uvedený kód, získáte následující výstup:
Výstup:
- Název servletu je „GuruServlet“, jak je uvedeno v souboru web.xml
5) Aplikace
- Aplikační objekt (řádek kódu 10) je instancí javax.servlet.ServletContext a používá se k získání informací o kontextu a atributů v JSP.
- Objekt aplikace je vytvořen kontejnerem jeden na aplikaci, když je aplikace nasazena.
- Objekt Servletcontext obsahuje sadu metod, které se používají k interakci s kontejnerem servletu. Můžeme najít informace o kontejneru servletu
Příklad:
<%@ 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>
Vysvětlení kódu:
- Ve výše uvedeném kódu pomáhá atribut aplikace získat kontextovou cestu stránky JSP.
6) Zasedání
- Relace obsahuje objekt „httpsession“ (řádek kódu 10).
- Objekt relace se používá k získání, nastavení a odstranění atributů rozsahu relace a také k získání informací o relaci
Příklad:
Implicitní_jsp7 (atribut je nastaven)
<%@ 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>
Implicitní_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>
Vysvětlení kódu:
Implicitní_jsp7.jsp
11. řádek kódu: nastavujeme atribut user v proměnné session a tuto hodnotu lze načíst z relace v kterémkoli jsp, který je z ní volán (_jsp8.jsp).
12. řádek kódu: Voláme další jsp on href, ve kterém získáme hodnotu pro atribut user, která je nastavena.
Implicitní_jsp8.jsp
11. řádek kódu: Získáváme hodnotu uživatelského atributu z objektu relace a zobrazujeme tuto hodnotu
Když spustíte výše uvedený kód, získáte následující výstup:
Když kliknete na odkaz pro uživatelské jméno. Získáte následující výstup.
Výstup:
- Když klikneme na odkaz uvedený v implicit_jsp7.jsp, jsme přesměrováni na druhou stránku jsp, tj. stránku (_jsp8.jsp) a získáme hodnotu z objektu session uživatelského atributu (_jsp7.jsp).
7) Kontext stránky
- Tento objekt je typu pagecontext.
- Používá se k získání, nastavení a odstranění atributů z určitého rozsahu
Rozsahy jsou 4 typů:
- Strana
- Žádost
- Zasedání
- editaci videa
Příklad:
<%@ 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>
Vysvětlení kódu:
11. řádek kódu: atribut nastavujeme pomocí objektu pageContext a má tři parametry:
- Klíč
- Hodnota
- Rozsah
Ve výše uvedeném kódu je klíč student a hodnota je „gurustudent“, zatímco rozsah je rozsah stránky. Zde je rozsah „stránka“ a lze jej získat pouze pomocí rozsahu stránky.
12. řádek kódu: Hodnotu atributu získáváme pomocí pageContext
Když spustíte výše uvedený kód, získáte následující výstup:
Výstup:
- Výstup vypíše „jméno studenta je gurustudent“.
8) Stránka
- Implicitní proměnná stránky obsahuje aktuálně prováděný objekt servletu pro odpovídající jsp.
- Funguje jako tento objekt pro aktuální stránku jsp.
Příklad:
V tomto příkladu používáme objekt stránky k získání názvu stránky pomocí metody 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>
Vysvětlení kódu:
Řádek 10–11 kódu: V tomto příkladu se pokoušíme použít metodu toString() objektu stránky a snažíme se získat název řetězce stránky JSP.
Když spustíte kód, získáte následující výstup:
Výstup:
- Výstupem je název řetězce výše uvedené stránky jsp
9) Výjimka
- Výjimka je implicitní objekt třídy throwable.
- Používá se pro zpracování výjimek v JSP.
- Objekt výjimky lze použít pouze na chybových stránkách.Příklad:
<%@ 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>
Vysvětlení kódu:
Řádek kódu 10-12 – Má pole čísel, tj. num1 se čtyřmi prvky. Ve výstupu se snažíme vytisknout pátý prvek pole z num1, který není deklarován v seznamu polí. Používá se tedy k získání objektu výjimky jsp.
Výstup:
Dostáváme ArrayIndexOfBoundsException v poli, kde získáváme pole num1 pátého prvku.