Implicitní objekty JSP

⚡ Chytré shrnutí

Implicitní objekty JSP jsou předdefinované proměnné, které kontejner servletů automaticky vytváří během překladu stránky, což umožňuje vývojářům přístup k výstupním streamům, požadavkům, odpovědím, relacím a datům aplikace přímo uvnitř stránky bez ruční deklarace nebo další konfigurace.

  • 🖨️ Výstupní objekt: Zapisuje data do vyrovnávací paměti a odesílá výstup klientovi prostřednictvím JSP.Writer proud.
  • 📥 Objekt požadavku: Instance HttpServletRequest, která načítá parametry, záhlaví a podrobnosti o serveru pomocí metody getParameter().
  • 📤 Objekt odpovědi: Implementuje HttpServletResponse pro nastavení typu obsahu, přidání souborů cookie a přesměrování klienta.
  • ⚙️ Konfigurace a aplikace: Konfigurace čte inicializační parametry ze souboru web.xml; Aplikace sdílí kontextová data v celém nasazení.
  • 🗂️ Relace a kontext stránky: Relace uchovává atributy uživatele napříč stránkami; PageContext spravuje atributy napříč stránkami, požadavky, relacemi a aplikacemi.
  • ⚠️ Objekt výjimky: Objekt Throwable dostupný pouze na chybových stránkách, který hlásí chyby za běhu, jako například ArrayIndexOutOfBounds.

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ů:

  1. Ven
  2. Žádost
  3. Odpověď
  4. Config
  5. editaci videa
  6. Zasedání
  7. PageContext
  8. Strana
  9. 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 javax.servlet.jsp.jsp.jsWriter třída
  • 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:

Code Řádek 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:

Venku v JSP

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 je akce provedena)

Žádost v JSP

Vysvětlení kódu:

Code Řádek 10–13: 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

Code Řádek 10–11: 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:

Žádost v JSP

Když napíšete test a kliknete na tlačítko Odeslat, získáte následující výstup „Uvítací test“.

Žádost v JSP

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:

Code Řádek 11: 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 mapuping servletu)

Konfigurace v JSP

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

Code Řádek 14–17: V souboru web.xml máme mapuping servletů do tříd.

Implicitní_jsp5.jsp

Code Řádek 10–11: 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:

Odpověď v JSP

Výstup:

  • Název servletu je „GuruServlet“, jak je název přítomen 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

Code Řádek 11: 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).

Code Řádek 12: Voláme další jsp on href, ve kterém získáme hodnotu pro atribut user, která je nastavena.

Implicitní_jsp8.jsp

Code Řádek 11: 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:

Relace v JSP

Když kliknete na odkaz pro uživatelské jméno. Získáte následující výstup.

Relace v JSP

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:

Code Řádek 11: 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.

Code Řádek 12: Hodnotu atributu získáváme pomocí pageContext

Když spustíte výše uvedený kód, získáte následující výstup:

PageContext v JSP

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:

Code Řádek 10–11: 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:

Stránka v JSP

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:

Code Řádek 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:

Výjimka v JSP

Dostáváme ArrayIndexOfBoundsException v poli, kde získáváme pole num1 pátého prvku.

Nejčastější dotazy

Ne. Kontejner vytvoří všech devět implicitních objektů automaticky během fáze překladu. Vývojáři je mohou používat přímo ve skriptletech a metodě service bez nutnosti importu balíčků nebo deklarace jakýchkoli proměnných.

Ne. Implicitní objekty jsou dostupné pouze uvnitř skriptletů a výrazů, které se mapují na metodu služby. Nelze je použít uvnitř deklaračních tagů JSP, které generují členy na úrovni třídy mimo danou metodu.

PageContext funguje napříč všemi čtyřmi oblastmi – stránka, požadavek, relace a aplikace. Poskytuje metody setAttribute, getAttribute a removeAttribute, což z něj činí nejflexibilnější implicitní objekt pro správu dat napříč různými úrovněmi oblasti působnosti.

Umělá inteligence dokáže vysvětlit každý implicitní objekt na příkladech, převést kód skriptletu na čistší alternativy a okamžitě odpovědět na otázky týkající se rozsahu. To pomáhá začátečníkům pochopit, kdy správně používat objekty požadavku, relace nebo aplikace.

Ano. Nástroje umělé inteligence mohou generovat funkční úryvky JSP kódu pomocí objektů out, request, session a dalších implicitních objektů a poté každý řádek vysvětlit. Vývojáři by si i tak měli zkontrolovat výstup, zda správně zachází s rozsahem a zda je zajištěno jeho zabezpečení.

Shrňte tento příspěvek takto: