JSP kaudsed objektid
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:
- välja
- Küsi
- Vastus
- config
- taotlus
- istung
- PageContext
- lehekülg
- 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 klassi javax.servlet.jsp.jspWriter objekt
- 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:
Koodirida 11-12– väljundit kasutatakse väljundvoogu printimiseks
Kui käivitame ülaltoodud koodi, saame järgmise väljundi:
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 tehakse)
Koodi selgitus:
Koodirida 10-13: Implicit_jsp2.jsp(vormis) taotlus saadetakse, seega töödeldakse muutuja kasutajanime ja saadetakse JSP-le guru.jsp.
Guru.jsp
Koodirida 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:
Kui kirjutate testi ja klõpsate esitamisnupul, saate järgmise väljundi "Tere tulemast test".
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:
Koodirida 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 servleti nime ja vastenduse)
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
Koodirida 14–17: Web.xml-s on meil servletid klassidele vastendatud.
Implicit_jsp5.jsp
Koodirida 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:
Väljund:
- Servleti nimi on "GuruServlet", kuna nimi on failis web.xml olemas
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
Koodirida 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).
Koodirida 12: Kutsume välja teise jsp on href, milles saame atribuudi kasutaja väärtuse, mis on määratud.
Implicit_jsp8.jsp
Koodirida 11: Me saame kasutaja atribuudi väärtuse seansiobjektilt ja kuvame selle väärtuse
Kui käivitate ülaltoodud koodi, saate järgmise väljundi:
Kui klõpsate kasutajanime lingil. Saate järgmise väljundi.
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:
Koodirida 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.
Koodirida 12: Atribuudi väärtuse saame kasutades pageContext
Kui käivitate ülaltoodud koodi, saate järgmise väljundi:
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:
Koodirida 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:
Väljund:
- Väljund on ülaltoodud jsp-lehe stringi nimi
9) Erand
- Erand on visatava klassi kaudne objekt.
- Seda kasutatakse erandite käsitlemine JSP-s.
- Erandobjekti saab kasutada ainult vealehtedel.Näide:
<%@ 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:
Koodirida 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:
Me saame massiivi ArrayIndexOfBoundsException, kus saame viienda elemendi massiivi num1.