JSP kaudsed objektid

โšก Nutikas kokkuvรตte

JSP kaudsed objektid on eelnevalt mรครคratletud muutujad, mille servleti konteiner loob lehe tรตlkimise ajal automaatselt, vรตimaldades arendajatel pรครคseda juurde vรคljundvoogudele, pรคringutele, vastustele, seanssidele ja rakenduse andmetele otse lehel ilma kรคsitsi deklareerimise vรตi tรคiendava konfigureerimiseta.

  • ๐Ÿ–จ๏ธ Vรคljas olev objekt: Kirjutab andmed puhvrisse ja saadab vรคljundi kliendile JSP kauduWriter voog.
  • ๐Ÿ“ฅ Taotluse objekt: HttpServletRequesti eksemplar, mis hangib parameetrid, pรคised ja serveri รผksikasjad funktsiooni getParameter() abil.
  • ๐Ÿ“ค Vastuse objekt: Rakendab HttpServletResponse'i sisutรผรผbi mรครคramiseks, kรผpsiste lisamiseks ja kliendi รผmbersuunamiseks.
  • โš™๏ธ Konfiguratsioon ja rakendus: Konfiguratsioon loeb web.xml-ist initsialiseerimisparameetreid; rakendus jagab kontekstiandmeid kogu juurutuse ulatuses.
  • ๐Ÿ—‚๏ธ Seanss ja lehekontekst: Seanss sรคilitab kasutaja atribuudid erinevatel lehtedel; PageContext haldab atribuute lehe, pรคringu, seansi ja rakenduse ulatuses.
  • โš ๏ธ Erandobjekt: Throwable on saadaval ainult vealehtedel, mis teavitavad kรคitusaja vigadest, nรคiteks ArrayIndexOutOfBounds.

Mis on JSP kaudne objekt?

  • JSP kaudsed objektid luuakse JSP servletti tรตlkimise etapis.
  • Neid objekte saab otse kasutada teenindusmeetodis kasutatavates skriptides.
  • Need loob konteiner automaatselt ja neile pรครคseb juurde objektide abil.

Kui palju kaudseid objekte on JSP-s saadaval?

Konteineris on saadaval 9 tรผรผpi kaudseid objekte:

  1. vรคlja
  2. Kรผsi
  3. Vastus
  4. config
  5. taotlus
  6. istung
  7. PageContext
  8. lehekรผlg
  9. Erand

Uurime รผkshaaval

1) Vรคljas

  • Out on รผks kaudsetest objektidest, mis kirjutab andmed puhvrisse ja saadab vastuseks vรคljundi kliendile
  • Out objekt vรตimaldab meil pรครคseda juurde servleti vรคljundvoogu
  • Out on javax.servlet.jsp.jsp objektWriter klass
  • Tรถรถtades koos servett, vajame trรผkikirjutaja objekti

Nรคide:

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

Koodi selgitus:

Code Rida 11-12โ€“ vรคljundit kasutatakse vรคljundvoogu printimiseks

Kui kรคivitame รผlaltoodud koodi, saame jรคrgmise vรคljundi:

Vรคljas JSP-s

Vรคljund:

  • Vรคljundis saame vรครคrtused num1 ja num2

2) Taotlus

  • Pรคringuobjekt on faili java.servlet.http.HttpServletRequest eksemplar ja see on รผks teenindusmeetodi argumentidest
  • See luuakse konteineriga iga pรคringu jaoks.
  • Seda kasutatakse sellise teabe taotlemiseks, nagu parameeter, pรคise teave, serveri nimi jne.
  • See kasutab pรคringu parameetrile juurdepรครคsuks getParameter().

Nรคide:

Implicit_jsp2.jsp(vorm, millelt pรคring saadetakse aadressile 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 (kus toiming sooritatakse)

Taotlus JSP-s

Koodi selgitus:

Code Rida 10โ€“13: Implicit_jsp2.jsp(vormis) taotlus saadetakse, seega tรถรถdeldakse muutuja kasutajanime ja saadetakse JSP-le guru.jsp.

Guru.jsp

Code Rida 10-11: See on toiming jsp, kus taotlust tรถรถdeldakse ja kasutajanimi vรตetakse vormilt jsp.

Kui kรคivitate รผlaltoodud koodi, saate jรคrgmise vรคljundi

Vรคljund:

Taotlus JSP-s

Kui kirjutate testi ja klรตpsate esitamisnupul, saate jรคrgmise vรคljundi "Tere tulemast test".

Taotlus JSP-s

3) Vastus

  • "Response" on klassi eksemplar, mis rakendab liidest HttpServletResponse
  • Konteiner loob selle objekti ja edastab parameetrina meetodi _jspservice().
  • Konteiner loob iga pรคringu jaoks vastuseobjekti.
  • See esindab vastust, mida saab kliendile anda
  • Vastuse kaudset objekti kasutatakse sisu tรผรผpimiseks, kรผpsise lisamiseks ja vastuse lehele suunamiseks

Nรคide:

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

Koodi selgitus:

Code Rida 11: Vastusobjektis saame mรครคrata sisutรผรผbi

Siin mรครคrame vastuseobjektis ainult sisutรผรผbi. Seetรตttu pole selle jaoks vรคljundit.

4) Konfig

  • "Config" on tรผรผpi java.servlet.servletConfig
  • Selle loob konteiner iga jsp-lehe jaoks
  • Seda kasutatakse lรคhtestamisparameetri hankimiseks failis web.xml

Nรคide:

Web.xml (mรครคrab nime ja kaardi)ping servletist)

Seadistage JSP-s

Implicit_jsp5.jsp (servleti nime vรครคrtuse hankimine)

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

Koodi selgitus:

Web.xml-s

Code Rida 14-17: Web.xml-is on meil kaartping servlettide lisamine klassidesse.

Implicit_jsp5.jsp

Code Rida 10-11: Servleti nime saamiseks JSP-s saame kasutada faili config.getServletName, mis aitab meil saada servleti nime.

Kui kรคivitate รผlaltoodud koodi, saate jรคrgmise vรคljundi:

Vastus JSP-s

Vรคljund:

  • Servleti nimi on โ€žGuruโ€žServletโ€, nagu nimigi web.xml-is esineb

5) rakendus

  • Rakendusobjekt (koodirida 10) on faili javax.servlet.ServletContext eksemplar ja seda kasutatakse JSP-s kontekstiteabe ja atribuutide hankimiseks.
  • Rakenduse objekti loob konteiner รผks rakenduse kohta, kui rakendus juurutatakse.
  • Servletikonteksti objekt sisaldab meetodite komplekti, mida kasutatakse servleti konteineriga suhtlemiseks. Leiame teavet servleti konteineri kohta

Nรคide:

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

Koodi selgitus:

  • รœlaltoodud koodis aitab rakenduse atribuut saada JSP lehe kontekstitee.

6) Seanss

  • Seanss hoiab "httpsession" objekti (koodirida 10).
  • Seansiobjekti kasutatakse seansi ulatuse atribuutide hankimiseks, mรครคramiseks ja eemaldamiseks ning seda kasutatakse ka seansi teabe hankimiseks

Nรคide:

Implicit_jsp7 (atribuut on mรครคratud)

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

Koodi selgitus:

Implicit_jsp7.jsp

Code Rida 11: me mรครคrame seansimuutujas atribuudi kasutaja ja selle vรครคrtuse saab tuua seansist olenemata sellest, millises jsp-s sellest vรคlja kutsutakse (_jsp8.jsp).

Code Rida 12: Kutsume vรคlja teise jsp on href, milles saame atribuudi kasutaja vรครคrtuse, mis on mรครคratud.

Implicit_jsp8.jsp

Code Rida 11: Me saame kasutaja atribuudi vรครคrtuse seansiobjektilt ja kuvame selle vรครคrtuse

Kui kรคivitate รผlaltoodud koodi, saate jรคrgmise vรคljundi:

Seanss JSP-s

Kui klรตpsate kasutajanime lingil. Saate jรคrgmise vรคljundi.

Seanss JSP-s

Vรคljund:

  • Kui klรตpsame failis implicit_jsp7.jsp antud lingil, suunatakse meid teisele jsp lehele ehk (_jsp8.jsp) lehele ja saame vรครคrtuse kasutaja atribuudi seansiobjektilt (_jsp7.jsp).

7) PageContext

  • See objekt on lehekonteksti tรผรผpi.
  • Seda kasutatakse atribuutide hankimiseks, mรครคramiseks ja eemaldamiseks teatud ulatusest

Ulatusi on 4 tรผรผpi:

  • lehekรผlg
  • Kรผsi
  • istung
  • taotlus

Nรคide:

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

Koodi selgitus:

Code Rida 11: me mรครคrame atribuudi pageContext objekti abil ja sellel on kolm parameetrit:

  • Vรตti
  • Vรครคrtus
  • Ulatus

รœlaltoodud koodis on vรตti รตpilane ja vรครคrtus on "gurustudent", samas kui ulatus on lehe ulatus. Siin on ulatus "leht" ja see saab kasutada ainult lehe ulatust.

Code Rida 12: Atribuudi vรครคrtuse saame kasutades pageContext

Kui kรคivitate รผlaltoodud koodi, saate jรคrgmise vรคljundi:

PageContext JSP-s

Vรคljund:

  • Vรคljundis trรผkitakse "รตpilase nimi on gurustudent".

8) Leht

  • Lehe kaudne muutuja sisaldab parajasti kรคivitatavat servletiobjekti vastava jsp jaoks.
  • Toimib praeguse jsp-lehe objektina.

Nรคide:

Selles nรคites kasutame lehe nime hankimiseks meetodit 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>

Koodi selgitus:

Code Rida 10-11: Selles nรคites proovime kasutada leheobjekti meetodit toString() ja proovime saada JSP lehe stringi nime.

Koodi kรคivitamisel saate jรคrgmise vรคljundi:

Leht JSP-s

Vรคljund:

  • Vรคljund on รผlaltoodud jsp-lehe stringi nimi

9) Erand

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

Koodi selgitus:

Code Rida 10-12 โ€“ Sellel on arvude massiiv, st num1 nelja elemendiga. Vรคljundis proovime trรผkkida massiivi viiendat elementi numbrist num1, mida massiiviloendis ei deklareerita. Seega kasutatakse seda jsp erandiobjekti hankimiseks.

Vรคljund:

Erand JSP-s

Me saame massiivi ArrayIndexOfBoundsException, kus saame viienda elemendi massiivi num1.

KKK

Ei. Konteiner loob kรตik รผheksa implitsiitset objekti automaatselt tรตlkefaasis. Arendajad saavad neid kasutada otse skriptlettides ja teenusemeetodis ilma pakette importimata vรตi muutujaid deklareerimata.

Ei. Kaudsed objektid on saadaval ainult skriptlettide ja avaldiste sees, mis on seotud teenusemeetodiga. Neid ei saa kasutada JSP deklaratsiooni siltide sees, mis genereerivad klassitaseme liikmeid vรคljaspool seda meetodit.

PageContext tรถรถtab kรตigis neljas ulatuses โ€“ leht, pรคring, seanss ja rakendus. See pakub meetodeid setAttribute, getAttribute ja removeAttribute, muutes selle kรตige paindlikumaks implitsiitseks objektiks andmete haldamiseks erinevate ulatuse tasemete vahel.

Tehisintellekt suudab iga implitsiitset objekti nรคidetega selgitada, skriptikoodi puhtamateks alternatiivideks teisendada ja ulatusega seotud kรผsimustele koheselt vastata. See aitab algajatel mรตista, millal pรคringu-, seansi- vรตi rakenduseobjekte รตigesti kasutada.

Jah. Tehisintellekti tรถรถriistad suudavad genereerida tรถรถtavaid JSP koodijuppe, kasutades out, request, session ja muid implitsiitseid objekte, ning seejรคrel iga rida selgitada. Arendajad peaksid ikkagi vรคljundit รผle vaatama, et tagada ulatuse korrektne kรคsitlemine ja turvalisus.

Vรตta see postitus kokku jรคrgmiselt: