JSP implicitte objekter

โšก Smart opsummering

Implicitte JSP-objekter er foruddefinerede variabler, som servlet-containeren opretter automatisk under sideoversรฆttelse, hvilket giver udviklere adgang til outputstrรธmme, anmodninger, svar, sessioner og applikationsdata direkte pรฅ en side uden manuel deklaration eller ekstra konfiguration.

  • ๐Ÿ–จ๏ธ Ud objekt: Skriver data til bufferen og sender output til klienten via JspWriter strรธm.
  • ๐Ÿ“ฅ Anmodningsobjekt: En instans af HttpServletRequest, der henter parametre, headere og serveroplysninger ved hjรฆlp af getParameter().
  • ๐Ÿ“ค Svarobjekt: Implementerer HttpServletResponse til at indstille indholdstypen, tilfรธje cookies og omdirigere klienten.
  • ๐Ÿ‡ง๐Ÿ‡ท Konfiguration og applikation: Config lรฆser initialiseringsparametre fra web.xml; Applikationen deler kontekstdata pรฅ tvรฆrs af hele implementeringen.
  • ๐Ÿ—‚๏ธ Session og sidekontekst: Session bevarer brugerattributter pรฅ tvรฆrs af sider; PageContext administrerer attributter pรฅ tvรฆrs af side-, anmodnings-, sessions- og applikationsomrรฅder.
  • โš ๏ธ Undtagelsesobjekt: En Throwable, der kun er tilgรฆngelig pรฅ fejlsider, der rapporterer runtime-fejl, f.eks. ArrayIndexOutOfBounds.

Hvad er JSP implicit objekt?

  • JSP implicitte objekter oprettes under oversรฆttelsesfasen af โ€‹โ€‹JSP til servlet'en.
  • Disse objekter kan bruges direkte i skriftletter, der gรฅr i servicemetoden.
  • De oprettes automatisk af containeren, og de kan tilgรฅs ved hjรฆlp af objekter.

Hvor mange implicitte objekter er tilgรฆngelige i JSP?

Der er 9 typer af implicitte objekter tilgรฆngelige i containeren:

  1. Out
  2. Anmod om
  3. Respons
  4. Config
  5. Anvendelse
  6. Session
  7. Sidekontekst
  8. Side
  9. undtagelse

Lad os studere en efter en

1) Ud

  • Out er et af de implicitte objekter til at skrive data til bufferen og sende output til klienten som svar
  • Out-objekt giver os adgang til servletens output-stream
  • Out er objektet for javax.servlet.jsp.jspWriter klasse
  • Mens du arbejder med servlet, vi har brug for printwriter-objekt

Eksempel:

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

Forklaring af koden:

Code Linje 11-12โ€“ ud bruges til at udskrive til outputstrรธm

Nรฅr vi udfรธrer ovenstรฅende kode, fรฅr vi fรธlgende output:

Ude i JSP

Output:

  • I outputtet fรฅr vi vรฆrdierne af num1 og num2

2) Anmodning

  • Anmodningsobjektet er en forekomst af java.servlet.http.HttpServletRequest, og det er et af argumentet for servicemetoden
  • Det vil blive oprettet af container for hver anmodning.
  • Det vil blive brugt til at anmode om oplysninger som parameter, headerinformation, servernavn osv.
  • Den bruger getParameter() til at fรฅ adgang til anmodningsparameteren.

Eksempel:

Implicit_jsp2.jsp(formular, hvorfra anmodningen sendes til 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 (hvor handlingen udfรธres)

Anmodning i JSP

Forklaring af kode:

Code Linje 10-13: I implicit_jsp2.jsp(form) sendes anmodningen, derfor behandles variablen brugernavn og sendes til guru.jsp, som er handling fra JSP.

Guru.jsp

Code Linje 10-11: Det er action jsp, hvor anmodningen behandles, og brugernavn er taget fra formen jsp.

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output

Output:

Anmodning i JSP

Nรฅr du skriver test og klikker pรฅ indsend-knappen, fรฅr du fรธlgende output "Velkomsttest."

Anmodning i JSP

3) Svar

  • "Response" er en forekomst af klasse, der implementerer HttpServletResponse-grรฆnsefladen
  • Container genererer dette objekt og sender til _jspservice()-metoden som parameter
  • "Responsobjekt" vil blive oprettet af containeren for hver anmodning.
  • Det reprรฆsenterer den respons, der kan gives til klienten
  • Det implicitte svarobjekt bruges til indholdstype, tilfรธjelse af cookie og omdirigering til svarside

Eksempel:

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

Forklaring af koden:

Code Linje 11: I responsobjektet kan vi indstille indholdstypen

Her indstiller vi kun indholdstypen i responsobjektet. Derfor er der ikke noget output til dette.

4) Konfig

  • "Config" er af typen java.servlet.servletConfig
  • Den oprettes af containeren for hver jsp-side
  • Det bruges til at hente initialiseringsparameteren i web.xml

Eksempel:

Web.xml (angiver navn og kort)ping af servlet'en)

Konfigurer i JSP

Implicit_jsp5.jsp (henter vรฆrdien af โ€‹โ€‹servletnavn)

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

Forklaring af koden:

I web.xml

Code Linje 14-17: I web.xml har vi et kortping af servlets til klasserne.

Implicit_jsp5.jsp

Code Linje 10-11: For at fรฅ navnet pรฅ servlet'en i JSP kan vi bruge config.getServletName, som vil hjรฆlpe os med at fรฅ navnet pรฅ servlet'en.

Nรฅr du udfรธrer ovenstรฅende kode fรฅr du fรธlgende output:

Svar i JSP

Output:

  • Servlet-navnet er "GuruServletโ€ som navnet findes i web.xml

5) Ansรธgning

  • Applikationsobjekt (kodelinje 10) er en forekomst af javax.servlet.ServletContext, og det bruges til at hente kontekstinformation og attributter i JSP.
  • Applikationsobjekt oprettes af container รฉn pr. applikation, nรฅr applikationen bliver implementeret.
  • Servletcontext-objektet indeholder et sรฆt metoder, der bruges til at interagere med servlet-beholderen. Vi kan finde information om servlet-beholderen

Eksempel:

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

Forklaring af koden:

  • I ovenstรฅende kode hjรฆlper applikationsattribut med at fรฅ kontekststien til JSP-siden.

6) Session

  • Sessionen holder "httpsession"-objektet (kodelinje 10).
  • Sessionsobjekt bruges til at hente, indstille og fjerne attributter til sessionsomfang og bruges ogsรฅ til at fรฅ sessionsoplysninger

Eksempel:

Implicit_jsp7 (attribut er indstillet)

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

Forklaring af koden:

Implicit_jsp7.jsp

Code Linje 11: vi indstiller attributten bruger i sessionsvariablen, og den vรฆrdi kan hentes fra sessionen i hvilken som helst jsp kaldes fra den (_jsp8.jsp).

Code Linje 12: Vi kalder en anden jsp pรฅ href, hvor vi fรฅr vรฆrdien for attributbruger, som er indstillet.

Implicit_jsp8.jsp

Code Linje 11: Vi fรฅr vรฆrdien af โ€‹โ€‹brugerattributten fra sessionsobjektet og viser denne vรฆrdi

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output:

Session i JSP

Nรฅr du klikker pรฅ linket til brugernavnet. Du fรฅr fรธlgende output.

Session i JSP

Output:

  • Nรฅr vi klikker pรฅ linket givet i implicit_jsp7.jsp, bliver vi omdirigeret til anden jsp-side, dvs. (_jsp8.jsp), og vi fรฅr vรฆrdien fra sessionsobjektet for brugerattributten (_jsp7.jsp).

7) Sidekontekst

  • Dette objekt er af typen sidekontekst.
  • Det bruges til at hente, indstille og fjerne attributterne fra et bestemt omfang

Omfang er af 4 typer:

  • Side
  • Anmod om
  • Session
  • Anvendelse

Eksempel:

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

Forklaring af koden:

Code Linje 11: vi indstiller attributten ved hjรฆlp af pageContext-objektet, og den har tre parametre:

  • Nรธgle
  • Vรฆrdi
  • Anvendelsesomrรฅde

I ovenstรฅende kode er nรธglen elev, og vรฆrdien er "gurustudent", mens omfanget er sideomfanget. Her er omfanget "side", og det kan kun bruge sideomfang.

Code Linje 12: Vi fรฅr vรฆrdien af โ€‹โ€‹attributten ved hjรฆlp af pageContext

Nรฅr du udfรธrer ovenstรฅende kode, fรฅr du fรธlgende output:

PageContext i JSP

Output:

  • Outputtet vil udskrive "elev navn er gurustudent".

8) Side

  • Side implicit variabel indeholder det aktuelt udfรธrte servlet-objekt for den tilsvarende jsp.
  • Fungerer som dette objekt for den aktuelle jsp-side.

Eksempel:

I dette eksempel bruger vi sideobjekt til at fรฅ sidenavnet ved hjรฆlp af toString-metoden

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

Forklaring af koden:

Code Linje 10-11: I dette eksempel forsรธger vi at bruge metoden toString() for sideobjektet og forsรธger at hente strengnavnet pรฅ JSP-siden.

Nรฅr du udfรธrer koden fรฅr du fรธlgende output:

Side i JSP

Output:

  • Output er strengnavnet pรฅ ovenstรฅende jsp-side

9) Undtagelse

  • Undtagelse er det implicitte objekt for den kastebare klasse.
  • Det bruges til undtagelseshรฅndtering i JSP.
  • Undtagelsesobjektet kan kun bruges pรฅ fejlsider.Eksempel:
<%@ 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>

Forklaring af koden:

Code Linje 10-12 โ€“ Den har en matrix af tal, dvs. num1 med fire elementer. I outputtet forsรธger vi at udskrive det femte element i arrayet fra num1, som ikke er erklรฆret i arraylisten. Sรฅ det bruges til at fรฅ undtagelsesobjektet af jsp.

Output:

Undtagelse i JSP

Vi fรฅr ArrayIndexOfBoundsException i arrayet, hvor vi fรฅr et num1 array af det femte element.

Ofte Stillede Spรธrgsmรฅl

Nej. Containeren opretter alle ni implicitte objekter automatisk under oversรฆttelsesfasen. Udviklere kan bruge dem direkte i scriptlets og servicemetoden uden at importere pakker eller deklarere nogen variabler.

Nej. Implicitte objekter er kun tilgรฆngelige i scriptlets og udtryk, der er knyttet til servicemetoden. De kan ikke bruges i JSP-deklarationstags, som genererer medlemmer pรฅ klasseniveau uden for den pรฅgรฆldende metode.

PageContext fungerer pรฅ tvรฆrs af alle fire scopes โ€“ page, request, session og application. Den tilbyder metoderne setAttribute, getAttribute og removeAttribute, hvilket gรธr den til det mest fleksible implicitte objekt til hรฅndtering af data pรฅ tvรฆrs af forskellige scope-niveauer.

AI kan forklare hvert implicit objekt med eksempler, konvertere scriptlet-kode til renere alternativer og besvare spรธrgsmรฅl om omfanget med det samme. Dette hjรฆlper begyndere med at forstรฅ, hvornรฅr de skal bruge anmodnings-, sessions- eller applikationsobjekter korrekt.

Ja. AI-vรฆrktรธjer kan generere fungerende JSP-snippets ved hjรฆlp af out, request, session og andre implicitte objekter og derefter forklare hver linje. Udviklere bรธr stadig gennemgรฅ outputtet for korrekt hรฅndtering af omfang og sikkerhed.

Opsummer dette indlรฆg med: