JSP-livssyklus: Faser og diagram forklart
โก Smart oppsummering
JSPs livssyklus beskriver hvordan en container oversetter en side til en servlet, kompilerer den, laster inn klassen, oppretter en instans, initialiserer den, betjener hver forespรธrsel gjennom den genererte tjenestemetoden og til slutt รธdelegger den.

Hva er JSPs livssyklus?
JSP livssyklus er definert som oversettelsen av en JSP-side til en servlet, fordi en JSP-side mรฅ konverteres til en servlet fรธr den kan behandle tjenesteforespรธrsler. Livssyklusen starter med opprettelsen av JSP-en og slutter med destruksjonen av servlet-instansen som genereres fra den.
Fordi den genererte klassen er en vanlig servlet, kan alt du allerede vet om servletentracDet gjelder fortsatt. Java Koden som containeren skriver er det som faktisk kjรธrer; JSP-filen er bare kildekoden du vedlikeholder.
Ulike faser av JSP livssyklus
Nรฅr nettleseren ber om en JSP, sjekker JSP-motoren fรธrst om den trenger รฅ kompilere siden. Hvis JSP-en aldri har blitt kompilert, eller hvis den har blitt endret siden forrige kompilering, kompilerer JSP-motoren siden.
Kompileringsprosessen for en JSP-side involverer tre trinn:
- Parsing av JSP
- Gjรธr om JSP til servlet
- Kompilere servleten
JSP livssyklusdiagram
JSP-livssyklusen er vist i diagrammet nedenfor, som traclagrer en enkelt side fra kildefilen til klassen som containeren kjรธrer.
Fรธlgende trinn forklarer livssyklusen til JSP:
- Oversettelse av JSP-side
- Kompilering av JSP-side (kompilering av JSP-siden til _jsp.java)
- Klasseinnlasting (_jsp.java konverteres til klassefilen _jsp.class)
- Instantiering (et objekt av den genererte servleten opprettes)
- Initialisering (jspInit()-metoden kalles av containeren)
- Forespรธrselsbehandling (_jspService()-metoden kalles av containeren)
- Destroy (jspDestroy()-metoden kalles av containeren)
Faser i JSP-livssyklusen forklart
La oss se nรฆrmere pรฅ hvert av punktene ovenfor.
1) Oversettelse av JSP-siden:
A Java Servlet-filen genereres fra en JSP-kildefil. Dette er det fรธrste trinnet i JSP-livssyklusen. I oversettelsesfasen validerer containeren den syntaktiske korrektheten til JSP-siden og taggfilene.
- JSP-containeren tolker standarddirektivene og -handlingene, og de tilpassede handlingene som refererer til tagbiblioteker (de er alle en del av JSP-siden og er dekket i JSP-elementer veiledning) som brukes pรฅ denne JSP-siden.
- I den billedlige beskrivelsen ovenfor er demo.jsp oversatt til demo_jsp.java i det fรธrste trinnet.
La oss ta 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>
Merknad om listen ovenfor: den er gjengitt nรธyaktig slik den er publisert, slik at den samsvarer med det genererte servlet-skjermbildet som fรธlger. To stavemรฅter i den vil ikke kompileres hvis den kopieres ordrett โ variabelen er deklarert som demvar men trykket som demovar, og det implisitte utdataobjektet er out med smรฅ bokstaver, ikke OutRett begge fรธr du kjรธrer siden selv.
Code Forklaring for Demo.jsp
Code Linje 1: html starttag
Code Linje 2: Hovedtagg
Code Linje 3โ4: Titteltag, f.eks. Demo JSP, og avsluttende head-tag
Code Linje 5โ6: Scriptlet-tag der variabelen demo initialiseres
Code Linje 7โ8: I body-taggen, en tekst som skal skrives ut i utdataene (Antall er: )
Code Linje 9: Scriptlet-taggen der vi prรธver รฅ skrive ut variabelen demovar med dens inkrementerte verdi
Code Linje 10โ11: Brรธdtekst og HTML-tagger lukket
Demo JSP-siden konverteres til demo_jsp-servleten som vises i koden nedenfor.
Code forklaring for Demo_jsp.java
Code Linje 1: Servlet-klassen demo_jsp utvider den overordnede klassen HttpServlet
Code Linje 2โ3: Overstyring av servicemetoden til JSP-en, dvs. _jspService, som har HttpServletRequest- og HttpServletResponse-objekter som parametere.
Code Linje 4: ร pningsmetode
Code Linje 5: Kalling av metoden getWriter() av โโresponsobjektet for รฅ fรฅ en utskriftWriter objekt (skriver ut en formatert representasjon av objekter til en tekstutdatastrรธm)
Code Linje 6: Kalling av setContentType-metoden til responsobjektet for รฅ angi innholdstypen
Code Linje 7: Bruk av write()-metoden til PrintWriter objekt for รฅ analysere html
Code Linje 8: Initialiserer demovar-variabelen til 0
Code Linje 9: Kalling av write()-metoden til PrintWriter objekt for รฅ analysere teksten
Code Linje 10: Kalling av print()-metoden til PrintWriter objekt for รฅ รธke variabelen demovar fra 0 + 1 = 1. Derfor vil utdataene vรฆre 1
Code Linje 11: Bruk av write()-metoden til PrintWriter objekt for รฅ analysere html
Utgang:
Nettleseren gjengir deretter telleren, som skjermbildet nedenfor viser.
- Her kan du se at utdataene pรฅ skjermbildet er 1, fordi demvar initialiseres til 0 og deretter รธkes til 0 + 1 = 1.
I eksemplet ovenfor,
- demo.jsp er en JSP der รฉn variabel initialiseres og รธkes. Denne JSP-en konverteres til servleten (demo_jsp.class) der JSP-motoren laster inn JSP-siden og konverterer den til servlet-innhold.
- Nรฅr konverteringen skjer, konverteres all maltekst til println()-setninger, og alle JSP-elementer konverteres til Java kode.
Dette er hvordan en enkel JSP-side blir oversatt til en servlet-klasse.
2) Kompilering av JSP-siden
- Den genererte Java servlet-filen kompileres til en Java servlet-klasse
- Oversettelsen av Java kildesiden til implementeringsklassen kan skje nรฅr som helst mellom distribusjonen av JSP-siden i containeren og behandlingen av JSP-siden.
- I den billedlige beskrivelsen ovenfor er demo_jsp.java kompilert til en klassefil demo_jsp.class
- Pรฅ Apache Tomcat skrives begge artefaktene under serverens arbeidskatalog, i
work/Catalina/localhost/<app>/org/apache/jsp, som er det fรธrste stedet man skal se etter nรฅr en oversettelsesfeil mรฅ diagnostiseres
3) Klasselasting
- Servlet-klassen som er generert fra JSP-kilden er nรฅ lastet inn i containeren.
4) Instantiering
- I dette trinnet genereres objektet, dvs. instansen av klassen.
- Containeren administrerer รฉn eller flere forekomster av denne klassen som svar pรฅ forespรธrsler og andre hendelser. Vanligvis bygges en JSP-container ved hjelp av en servlet-container. En JSP-container er en utvidelse av en servlet-container, ettersom begge containerne stรธtter JSP og servlets.
- JspPage-grensesnittet, som leveres av containeren, deklarerer metodene jspInit() og jspDestroy().
- Det finnes et grensesnitt, HttpJspPage, som betjener HTTP-forespรธrsler, og det inneholder ogsรฅ tjenestemetoden. Signaturen avhenger av protokollen, og det er derfor containeren genererer den metoden i stedet for รฅ be sideforfatteren om รฅ deklarere den.
5) Initialisering
public void jspInit() { //initializing the code }
- jspInit()-metoden initialiserer servlet-instansen som ble generert fra JSP-en, og kalles av containeren i denne fasen.
- Nรฅr instansen er opprettet, kalles init-metoden umiddelbart etter det.
- Den kalles bare รฉn gang i lรธpet av en JSP-livssyklus, og metoden for initialisering deklareres som vist ovenfor.
6) Behandling av forespรธrsel
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
- _jspService()-metoden kalles av containeren for alle forespรธrsler som genereres av JSP-siden i lรธpet av dens livssyklus.
- For denne fasen mรฅ siden gรฅ gjennom alle fasene ovenfor, og fรธrst da kan tjenestemetoden kalles.
- Den sender forespรธrsels- og svarobjektene
- Denne metoden kan ikke overstyres, fordi containeren skriver den under oversettelsen
- Metoden er vist ovenfor. Den er ansvarlig for รฅ hรฅndtere alle HTTP-metoder, dvs. GET, POST og resten.
7) รdelegg
public void _jspdestroy() { //all clean up code }
- jspDestroy()-metoden kalles ogsรฅ av containeren.
- Denne metoden kalles nรฅr containeren bestemmer at den ikke lenger trenger servlet-instansen for รฅ betjene forespรธrsler.
- Nรฅr kallet til destroy-metoden er gjort, er servleten klar for sรธppelinnsamling.
- Dette er slutten pรฅ livssyklusen.
- Vi kan overstyre jspDestroy() nรฅr vi utfรธrer opprydding, for eksempel รฅ frigjรธre databasetilkoblinger eller lukke รฅpne filer.
En navnebemerkning verdt รฅ ta med seg videre: fra Jakarta EE 9 og utover lever disse typene i jakarta.servlet.jsp pakke heller enn javax.servlet.jsp, sรฅ eldre importer mรฅ oppdateres nรฅr et program flyttes til en gjeldende server.



