JSP livscyklus: Faser og diagram forklaret
โก Smart opsummering
JSP's livscyklus beskriver, hvordan en container oversรฆtter en side til en servlet, kompilerer den, indlรฆser klassen, opretter en instans, initialiserer den, behandler alle anmodninger via den genererede servicemetode og til sidst รธdelรฆgger den.

Hvad er JSP's livscyklus?
JSP livscyklus defineres som oversรฆttelsen af โโen JSP-side til en servlet, fordi en JSP-side skal konverteres til en servlet, fรธr den kan behandle serviceanmodninger. Livscyklussen starter med oprettelsen af โโJSP'en og slutter med destruktionen af โโden servlet-instans, der genereres ud fra den.
Fordi den genererede klasse er en almindelig servlet, kan alt, hvad du allerede ved om servlet'en,tracDet gรฆlder stadig. Java Den kode, som containeren skriver, er det, der rent faktisk kรธrer; JSP-filen er kun den kildekode, du vedligeholder.
Forskellige faser af JSP livscyklus
Nรฅr browseren beder om en JSP, kontrollerer JSP-motoren fรธrst, om den skal kompilere siden. Hvis JSP'en aldrig er blevet kompileret, eller hvis den er blevet รฆndret siden den sidste kompilering, kompilerer JSP-motoren siden.
Kompileringsprocessen for en JSP-side involverer tre trin:
- Parsing af JSP
- Forvandler JSP til servlet
- Kompilere servlet
JSP livscyklusdiagram
JSP'ens livscyklus er vist i diagrammet nedenfor, som tracer en enkelt side fra kildefilen til den klasse, som containeren udfรธrer.
Fรธlgende trin forklarer JSP's livscyklus:
- Oversรฆttelse af JSP-side
- Kompilering af JSP-side (kompilering af JSP-siden til _jsp.java)
- Klasseindlรฆsning (_jsp.java konverteres til klassefilen _jsp.class)
- Instantiering (et objekt af den genererede servlet oprettes)
- Initialisering (jspInit()-metoden kaldes af containeren)
- Anmodningsbehandling (metoden _jspService() kaldes af containeren)
- Destroy (jspDestroy()-metoden kaldes af containeren)
Faser i JSP-livscyklussen forklaret
Lad os se nรฆrmere pรฅ hvert af ovenstรฅende punkter.
1) Oversรฆttelse af JSP-siden:
A Java Servlet-filen genereres fra en JSP-kildefil. Dette er det fรธrste trin i JSP'ens livscyklus. I oversรฆttelsesfasen validerer containeren den syntaktiske korrekthed af JSP-siden og tag-filerne.
- JSP-containeren fortolker standarddirektiverne og -handlingerne samt de brugerdefinerede handlinger, der refererer til tagbiblioteker (de er alle en del af JSP-siden og er dรฆkket i JSP elementer tutorial) brugt pรฅ denne JSP-side.
- I den billedlige beskrivelse ovenfor er demo.jsp oversat til demo_jsp.java i fรธrste trin.
Lad os tage et eksempel pรฅ "demo.jsp" som vist nedenfor:
Demo.jsp
<html>
<head>
<title>Demo JSP</title>
</head>
<%
int demvar=0;%>
<body>
Count is:
<% Out.println(demovar++); %>
<body>
</html>
Bemรฆrkning til ovenstรฅende liste: Den gengives prรฆcis som udgivet, sรฅ den matcher det genererede servlet-skรฆrmbillede, der fรธlger. To stavemรฅder i den vil ikke kompileres, hvis den kopieres ordret โ variablen erklรฆres som demvar men udskrives som demovar, og det implicitte outputobjekt er out med smรฅ bogstaver, ikke OutRet begge dele, fรธr du selv kรธrer siden.
Code Forklaring til Demo.jsp
Code Linje 1: html starttag
Code Linje 2: Hovedtag
Code Linje 3-4: Titeltag, f.eks. Demo JSP, og afsluttende headtag
Code Linje 5-6: Scriptlet-tag, hvor variablen demo initialiseres
Code Linje 7 โ 8: I body-tagget, en tekst der skal udskrives i outputtet (Count is: )
Code Linje 9: Scriptlet-tag, hvor vi forsรธger at udskrive variablen demovar med dens inkrementerede vรฆrdi
Code Linje 10 โ 11: Brรธdtekst og HTML-tags lukket
Demo JSP-siden konverteres til servlet'en demo_jsp, som vist i koden nedenfor.
Code forklaring til Demo_jsp.java
Code Linje 1: Servlet-klassen demo_jsp udvider den overordnede klasse HttpServlet
Code Linje 2 โ 3: Tilsidesรฆttelse af servicemetoden for JSP'en, dvs. _jspService, som har HttpServletRequest- og HttpServletResponse-objekter som parametre.
Code Linje 4: ร bningsmetode
Code Linje 5: Kald af metoden getWriter() af responsobjektet for at fรฅ en udskriftWriter objekt (udskriver en formateret reprรฆsentation af objekter til en tekstoutputstrรธm)
Code Linje 6: Kald af setContentType-metoden for responsobjektet for at indstille indholdstypen
Code Linje 7: Brug af write()-metoden i PrintWriter objekt til at parse html
Code Linje 8: Initialisering af demovar-variablen til 0
Code Linje 9: Kald af write()-metoden i PrintWriter objekt til at analysere teksten
Code Linje 10: Kald af print()-metoden i PrintWriter objekt for at รธge variablen demovar fra 0 + 1 = 1. Derfor vil outputtet vรฆre 1
Code Linje 11: Brug af write()-metoden i PrintWriter objekt til at parse html
Output:
Browseren gengiver derefter tรฆlleren, som skรฆrmbilledet nedenfor viser.
- Her kan du se, at outputtet pรฅ skรฆrmbilledet er 1, fordi demvar initialiseres til 0 og derefter รธges til 0 + 1 = 1.
I ovenstรฅende eksempel
- demo.jsp er en JSP, hvor รฉn variabel initialiseres og รธges. Denne JSP konverteres til servlet'en (demo_jsp.class), hvor JSP-motoren indlรฆser JSP-siden og konverterer den til servlet-indhold.
- Nรฅr konverteringen sker, konverteres al skabelontekst til println()-sรฆtninger, og alle JSP-elementer konverteres til Java kode.
Sรฅdan oversรฆttes en simpel JSP-side til en servlet-klasse.
2) Kompilering af JSP-siden
- Den genererede Java servlet-filen kompileres til en Java servlet-klasse
- Oversรฆttelsen af Java kildesiden til dens implementeringsklasse kan ske nรฅr som helst mellem implementeringen af โโJSP-siden i containeren og behandlingen af โโJSP-siden.
- I den billedlige beskrivelse ovenfor er demo_jsp.java kompileret til en klassefil demo_jsp.class
- Pรฅ Apache Tomcat er begge artefakter skrevet under serverens arbejdsmappe, i
work/Catalina/localhost/<app>/org/apache/jsp, hvilket er det fรธrste sted at se, nรฅr en oversรฆttelsesfejl skal diagnosticeres
3) Klasseindlรฆsning
- Servlet-klassen, der er genereret fra JSP-kildekoden, er nu indlรฆst i containeren.
4) Instantiering
- I dette trin genereres objektet, dvs. klassens instans.
- Containeren administrerer en eller flere instanser af denne klasse som svar pรฅ anmodninger og andre hรฆndelser. Typisk bygges en JSP-container ved hjรฆlp af en servlet-container. En JSP-container er en udvidelse af en servlet-container, da begge containere understรธtter JSP og servlets.
- JspPage-grรฆnsefladen, som leveres af containeren, deklarerer metoderne jspInit() og jspDestroy().
- Der er en grรฆnseflade, HttpJspPage, som hรฅndterer HTTP-anmodninger, og den indeholder ogsรฅ servicemetoden. Dens signatur afhรฆnger af protokollen, hvilket er grunden til, at containeren genererer den metode i stedet for at bede sideforfatteren om at deklarere den.
5) Initialisering
public void jspInit() { //initializing the code }
- Metoden jspInit() initialiserer den servlet-instans, der blev genereret fra JSP'en, og kaldes af containeren i denne fase.
- Nรฅr instansen er oprettet, kaldes init-metoden umiddelbart efter det.
- Den kaldes kun รฉn gang i lรธbet af en JSP-livscyklus, og metoden til initialisering deklareres som vist ovenfor.
6) Behandling af anmodning
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
- Metoden _jspService() kaldes af containeren for alle anmodninger, der rejses af JSP-siden i lรธbet af dens livscyklus.
- I denne fase skal siden gennemgรฅ alle ovenstรฅende faser, og fรธrst derefter kan servicemetoden kaldes.
- Den sender anmodnings- og svarobjekterne
- Denne metode kan ikke tilsidesรฆttes, fordi containeren skriver den under oversรฆttelsen
- Metoden er vist ovenfor. Den er ansvarlig for at hรฅndtere alle HTTP-metoder, dvs. GET, POST og resten.
7) รdelรฆg
public void _jspdestroy() { //all clean up code }
- Metoden jspDestroy() kaldes ogsรฅ af containeren.
- Denne metode kaldes, nรฅr containeren beslutter, at den ikke lรฆngere har brug for servlet-instansen til at servicere anmodninger.
- Nรฅr kaldet til destroy-metoden er foretaget, er servlet'en klar til garbage collection.
- Dette er afslutningen pรฅ livscyklussen.
- Vi kan tilsidesรฆtte jspDestroy(), nรฅr vi udfรธrer en oprydning, f.eks. nรฅr vi frigiver databaseforbindelser eller lukker รฅbne filer.
En navngivningsbemรฆrkning, der er vรฆrd at viderefรธre: fra Jakarta EE 9 og fremefter lever disse typer i jakarta.servlet.jsp pakke snarere end javax.servlet.jsp, sรฅ รฆldre importer skal opdateres, nรฅr en applikation flyttes til en nuvรฆrende server.



