JSP implicit objektumok

โšก Okos รถsszefoglalรณ

A JSP implicit objektumok elล‘re definiรกlt vรกltozรณk, amelyeket a servlet kontรฉner automatikusan lรฉtrehoz az oldal fordรญtรกsa sorรกn, lehetล‘vรฉ tรฉve a fejlesztล‘k szรกmรกra, hogy kรถzvetlenรผl az oldalon belรผl hozzรกfรฉrjenek a kimeneti adatfolyamokhoz, kรฉrรฉsekhez, vรกlaszokhoz, munkamenetekhez รฉs alkalmazรกsadatokhoz manuรกlis deklarรกciรณ vagy extra konfigurรกciรณ nรฉlkรผl.

  • ๐Ÿ–จ๏ธ Kimenล‘ objektum: Adatokat รญr a pufferbe, รฉs kimenetet kรผld a kliensnek a JSP-n keresztรผl.Writer folyam.
  • ๐Ÿ“ฅ Kรฉrelem objektuma: A HttpServletRequest egy pรฉldรกnya, amely a getParameter() hasznรกlatรกval kรฉri le a paramรฉtereket, fejlรฉceket รฉs a szerver adatait.
  • ๐Ÿ“ค Vรกlasz objektum: A HttpServletResponse metรณdust valรณsรญtja meg a tartalomtรญpus beรกllรญtรกsรกhoz, sรผtik hozzรกadรกsรกhoz รฉs az รผgyfรฉl รกtirรกnyรญtรกsรกhoz.
  • ๐Ÿ‡ง๐Ÿ‡ท Konfigurรกciรณ รฉs alkalmazรกs: A Config inicializรกlรกsi paramรฉtereket olvas a web.xml fรกjlbรณl; az alkalmazรกs megosztja a kontextusadatokat a teljes telepรญtรฉsben.
  • ๐Ÿ—‚๏ธ Munkamenet รฉs oldalkontextus: A munkamenet (Session) megล‘rzi a felhasznรกlรณi attribรบtumokat az oldalak kรถzรถtt; a PageContext kezeli az attribรบtumokat az oldalak, kรฉrรฉsek, munkamenetek รฉs alkalmazรกsok hatรณkรถrรฉben.
  • โš ๏ธ Kivรฉtel objektum: Egy csak hibaoldalakon elรฉrhetล‘ Throwable objektum, amely futรกsidejลฑ hibรกkat, pรฉldรกul ArrayIndexOutOfBounds hibรกkat jelent.

Mi az a JSP Implicit objektum?

  • A JSP implicit objektumok a JSP servletre valรณ fordรญtรกsi fรกzisรกban jรถnnek lรฉtre.
  • Ezek az objektumok kรถzvetlenรผl felhasznรกlhatรณk a szolgรกltatรกsi metรณdusba tartozรณ szkriptekben.
  • Ezeket a tรกrolรณ automatikusan hozza lรฉtre, รฉs objektumok segรญtsรฉgรฉvel รฉrhetล‘k el.

Hรกny implicit objektum รฉrhetล‘ el a JSP-ben?

A tรกrolรณban 9 tรญpusรบ implicit objektum รฉrhetล‘ el:

  1. Ki
  2. Kรฉrjen
  3. Vรกlasz
  4. Config
  5. Alkalmazรกs
  6. รœlรฉs
  7. PageContext
  8. oldal
  9. kivรฉtel

Tanulmรกnyozzuk egyenkรฉnt

1) Ki

  • Az Out az egyik implicit objektum, amely az adatokat a pufferbe รญrja, รฉs vรกlaszkรฉnt elkรผldi a kimenetet a kliensnek
  • Az Out objektum lehetล‘vรฉ teszi szรกmunkra, hogy hozzรกfรฉrjรผnk a szervlet kimeneti adatfolyamรกhoz
  • Az Out a javax.servlet.jsp.jsp objektuma.Writer osztรกly
  • Munka kรถzben szervlet, szรผksรฉgรผnk van nyomtatรณรญrรณ objektumra

Pรฉlda:

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

A kรณd magyarรกzata:

Code 11-12. sorโ€“ out a kimeneti adatfolyamba tรถrtรฉnล‘ nyomtatรกsra szolgรกl

Amikor vรฉgrehajtjuk a fenti kรณdot, a kรถvetkezล‘ kimenetet kapjuk:

JSP-ben

output:

  • A kimenetben a num1 รฉs num2 รฉrtรฉkeket kapjuk

2) Kรฉrรฉs

  • A kรฉrelem objektum a java.servlet.http.HttpServletRequest pรฉldรกnya, รฉs ez a szolgรกltatรกs metรณdusรกnak egyik argumentuma
  • Minden kรฉrelemhez tรกrolรณ hozza lรฉtre.
  • A rendszer olyan informรกciรณk kรฉrรฉsรฉre szolgรกl, mint a paramรฉter, a fejlรฉc informรกciรณ, a szerver neve stb.
  • A getParameter() segรญtsรฉgรฉvel รฉri el a kรฉrรฉsi paramรฉtert.

Pรฉlda:

Implicit_jsp2.jsp(ลฑrlap, amelyrล‘l a kรฉrรฉs elkรผldรฉsre kerรผl a guru.jsp cรญmre)

<%@ 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 (ahol a mลฑveletet vรฉgrehajtjรกk)

Kรฉrรฉs JSP-ben

A kรณd magyarรกzata:

Code 10-13. sor: Az implicit_jsp2.jsp(form) kรฉrรฉs elkรผldรฉsre kerรผl, รญgy a felhasznรกlรณnรฉv vรกltozรณ feldolgozรกsa รฉs elkรผldรฉse a guru.jsp-nek, ami a JSP mลฑvelete.

Guru.jsp fรกjl

Code 10-11. sor: A kรฉrรฉs feldolgozรกsa a jsp mลฑveletben tรถrtรฉnik, a felhasznรกlรณnรฉv pedig a jsp ลฑrlapbรณl szรกrmazik.

Amikor vรฉgrehajtja a fenti kรณdot, a kรถvetkezล‘ kimenetet kapja

output:

Kรฉrรฉs JSP-ben

Amikor megรญrja a tesztet, รฉs rรกkattint a kรผldรฉs gombra, akkor a kรถvetkezล‘ kimenetet kapja: โ€žรœdvรถzรถljรผk tesztโ€.

Kรฉrรฉs JSP-ben

3) Vรกlasz

  • A โ€žResponseโ€ az osztรกly egy pรฉldรกnya, amely megvalรณsรญtja a HttpServletResponse interfรฉszt
  • A tรกrolรณ lรฉtrehozza ezt az objektumot, รฉs paramรฉterkรฉnt รกtadja a _jspservice() metรณdust
  • A โ€žvรกlaszobjektumotโ€ a tรกrolรณ minden kรฉrรฉshez lรฉtrehozza.
  • Az รผgyfรฉlnek adhatรณ vรกlaszt kรฉpviseli
  • A vรกlasz implicit objektum a tartalom tรญpusรกra, a cookie hozzรกadรกsรกra รฉs a vรกlaszoldalra valรณ รกtirรกnyรญtรกsra szolgรกl

Pรฉlda:

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

A kรณd magyarรกzata:

Code 11 vonal: A vรกlaszobjektumban beรกllรญthatjuk a tartalom tรญpusรกt

Itt csak a tartalomtรญpust รกllรญtjuk be a vรกlaszobjektumban. Ezรฉrt erre nincs kimenet.

4) Konfig

  • A โ€žConfigโ€ a java.servlet.servletConfig tรญpusรบ
  • A tรกrolรณ hozza lรฉtre minden jsp-oldalhoz
  • Az inicializรกlรกsi paramรฉter beszerzรฉsรฉre szolgรกl a web.xml fรกjlban

Pรฉlda:

Web.xml (megadja a nevet รฉs a tรฉrkรฉpet)ping a szervletbล‘l)

Konfigurรกciรณ JSP-ben

Implicit_jsp5.jsp (a szervletnรฉv รฉrtรฉkรฉnek lekรฉrรฉse)

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

A kรณd magyarรกzata:

A web.xml fรกjlban

Code 14-17. sor: A web.xml fรกjlban talรกlhatรณ a tรฉrkรฉpping a szervletek osztรกlyokhoz valรณ hozzรกrendelรฉse.

Implicit_jsp5.jsp

Code 10-11. sor: A JSP-ben lรฉvล‘ servlet nevรฉnek lekรฉrรฉsรฉhez hasznรกlhatjuk a config.getServletName fรกjlt, amely segรญt a servlet nevรฉnek beszerzรฉsรฉben.

Amikor vรฉgrehajtja a fenti kรณdot, a kรถvetkezล‘ kimenetet kapja:

Vรกlasz JSP-ben

output:

  • A szervlet neve โ€žGuruA โ€žservletโ€ nรฉv szerepel a web.xml fรกjlban

5) alkalmazรกs

  • Az alkalmazรกsobjektum (10-es kรณdsor) a javax.servlet.ServletContext pรฉldรกnya, รฉs a kontextusinformรกciรณk รฉs attribรบtumok lekรฉrรฉsรฉre szolgรกl a JSP-ben.
  • Alkalmazรกsonkรฉnt egy tรกrolรณ hozza lรฉtre az alkalmazรกsobjektumot, amikor az alkalmazรกs telepรญtve van.
  • A Servletcontext objektum olyan metรณdusokat tartalmaz, amelyek a servlet tรกrolรณval valรณ interakciรณhoz hasznรกlhatรณk. Informรกciรณkat talรกlhatunk a szervlet tรกrolรณrรณl

Pรฉlda:

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

A kรณd magyarรกzata:

  • A fenti kรณdban az application attribรบtum segรญt a JSP oldal kontextusรบtvonalรกnak lekรฉrรฉsรฉben.

6) Munkamenet

  • A munkamenet โ€žhttpsessionโ€ objektumot tart (10-es kรณdsor).
  • A Session objektum a munkamenet hatรณkรถrรฉhez tartozรณ attribรบtumok lekรฉrรฉsรฉre, beรกllรญtรกsรกra รฉs eltรกvolรญtรกsรกra szolgรกl, valamint a munkamenet-informรกciรณk lekรฉrรฉsรฉre is hasznรกlhatรณ

Pรฉlda:

Implicit_jsp7 (az attribรบtum be van รกllรญtva)

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

A kรณd magyarรกzata:

Implicit_jsp7.jsp

Code 11 vonal: beรกllรญtjuk a user attribรบtumot a session vรกltozรณban, รฉs ez az รฉrtรฉk lekรฉrhetล‘ a munkamenetbล‘l, amelyik jsp-t onnan hรญvjรกk meg (_jsp8.jsp).

Code 12 vonal: Meghรญvunk egy mรกsik jsp on href-t, amelyben megkapjuk a beรกllรญtott user attribรบtum รฉrtรฉkรฉt.

Implicit_jsp8.jsp

Code 11 vonal: A felhasznรกlรณi attribรบtum รฉrtรฉkรฉt a session objektumtรณl kapjuk, รฉs megjelenรญtjรผk ezt az รฉrtรฉket

Amikor vรฉgrehajtja a fenti kรณdot, a kรถvetkezล‘ kimenetet kapja:

Munkamenet JSP-ben

Amikor rรกkattint a felhasznรกlรณnรฉv linkjรฉre. A kรถvetkezล‘ kimenetet kapod.

Munkamenet JSP-ben

output:

  • Amikor rรกkattintunk az implicit_jsp7.jsp-ben megadott linkre, akkor รกtirรกnyรญtunk a mรกsodik jsp oldalra, azaz (_jsp8.jsp) oldalra, รฉs megkapjuk a felhasznรกlรณi attribรบtum session objektumรกnak รฉrtรฉkรฉt (_jsp7.jsp).

7) PageContext

  • Ez az objektum oldalkontextus tรญpusรบ.
  • Egy adott hatรณkรถr attribรบtumainak lekรฉrรฉsรฉre, beรกllรญtรกsรกra รฉs eltรกvolรญtรกsรกra szolgรกl

A hatรณkรถr 4 tรญpusbรณl รกll:

  • oldal
  • Kรฉrjen
  • รœlรฉs
  • Alkalmazรกs

Pรฉlda:

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

A kรณd magyarรกzata:

Code 11 vonal: az attribรบtumot pageContext objektummal รกllรญtjuk be, รฉs hรกrom paramรฉtere van:

  • Kulcs
  • ร‰rtรฉk:
  • Kรถr

A fenti kรณdban a kulcs a tanulรณ, az รฉrtรฉk pedig a โ€žgurustudentโ€, mรญg a hatรณkรถr az oldal hatรณkรถre. Itt a hatรณkรถr "oldal", รฉs csak az oldal hatรณkรถrรฉt hasznรกlja.

Code 12 vonal: Az attribรบtum รฉrtรฉkรฉt a pageContext hasznรกlatรกval kapjuk meg

Amikor vรฉgrehajtja a fenti kรณdot, a kรถvetkezล‘ kimenetet kapja:

PageContext a JSP-ben

output:

  • A kimenet a kรถvetkezล‘t fogja รญrni: โ€žA hallgatรณ neve gurusztโ€.

8) Oldal

  • Az oldal implicit vรกltozรณja az aktuรกlisan vรฉgrehajtott servlet objektumot tartalmazza a megfelelล‘ jsp-hez.
  • Ez az objektum az aktuรกlis jsp-oldalon.

Pรฉlda:

Ebben a pรฉldรกban oldalobjektumot hasznรกlunk az oldalnรฉv lekรฉrรฉsรฉhez a toString metรณdus segรญtsรฉgรฉvel

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

A kรณd magyarรกzata:

Code 10-11. sor: Ebben a pรฉldรกban megprรณbรกljuk az oldalobjektum toString() metรณdusรกt hasznรกlni, รฉs megprรณbรกljuk lekรฉrni a JSP oldal karakterlรกncnevรฉt.

Amikor vรฉgrehajtja a kรณdot, a kรถvetkezล‘ kimenetet kapja:

Oldal JSP-ben

output:

  • A kimenet a fenti jsp oldal karakterlรกncรกnak neve

9) Kivรฉtel

  • A kivรฉtel a dobhatรณ osztรกly implicit tรกrgya.
  • Ezt hasznรกljรกk kivรฉtelkezelรฉs JSP-ben.
  • A kivรฉtelobjektum csak hibaoldalakon hasznรกlhatรณ.Pรฉlda:
<%@ 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>

A kรณd magyarรกzata:

Code 10-12. sor โ€“ Van egy szรกmtรถmbje, azaz a nรฉgy elemลฑ szรกm1. A kimenetben a tรถmb รถtรถdik elemรฉt prรณbรกljuk kiรญrni a szรกm1-bล‘l, ami nincs deklarรกlva a tรถmblistรกban. Tehรกt a jsp kivรฉtelobjektumรกnak lekรฉrรฉsรฉre hasznรกljรกk.

output:

Kivรฉtel a JSP-ben

ArrayIndexOfBoundsException-t kapunk abban a tรถmbben, ahol az รถtรถdik elem num1 tรถmbjรฉt kapjuk.

GYIK

Nem. A kontรฉner mind a kilenc implicit objektumot automatikusan lรฉtrehozza a fordรญtรกsi fรกzis sorรกn. A fejlesztล‘k kรถzvetlenรผl hasznรกlhatjรกk ล‘ket a scriptletekben รฉs a service metรณdusban csomagok importรกlรกsa vagy vรกltozรณk deklarรกlรกsa nรฉlkรผl.

Nem. Az implicit objektumok csak a service metรณdusra lekรฉpezett szkriptleteken รฉs kifejezรฉseken belรผl รฉrhetล‘k el. Nem hasznรกlhatรณk JSP deklarรกciรณs cรญmkรฉken belรผl, amelyek osztรกlyszintลฑ tagokat generรกlnak a metรณduson kรญvรผl.

A PageContext mind a nรฉgy hatรณkรถrben โ€“ page, request, session รฉs application โ€“ mลฑkรถdik. setAttribute, getAttribute รฉs removeAttribute metรณdusokat biztosรญt, รญgy ez a legrugalmasabb implicit objektum az adatok kรผlรถnbรถzล‘ hatรณkรถrszinteken tรถrtรฉnล‘ kezelรฉsรฉhez.

A mestersรฉges intelligencia kรฉpes pรฉldรกkkal elmagyarรกzni az egyes implicit objektumokat, a szkriptlet kรณdjรกt letisztultabb alternatรญvรกkkรก alakรญtani, รฉs azonnal megvรกlaszolni a hatรณkรถrrel kapcsolatos kรฉrdรฉseket. Ez segรญt a kezdล‘knek megรฉrteni, hogy mikor kell helyesen hasznรกlni a kรฉrรฉs-, munkamenet- vagy alkalmazรกsobjektumokat.

Igen. A mestersรฉges intelligencia eszkรถzรถk kรฉpesek mลฑkรถdล‘ JSP kรณdrรฉszleteket generรกlni out, request, session รฉs mรกs implicit objektumok hasznรกlatรกval, majd minden sort elmagyarรกzni. A fejlesztล‘knek tovรกbbra is ellenล‘rizniรผk kell a kimenetet a megfelelล‘ hatรณkรถr-kezelรฉs รฉs biztonsรกg รฉrdekรฉben.

Foglald รถssze ezt a bejegyzรฉst a kรถvetkezล‘kรฉppen: