Životni ciklus JSP-a: Objašnjenje faza i dijagrama

⚡ Pametni sažetak

Životni ciklus JSP-a opisuje kako kontejner prevodi stranicu u servlet, kompajlira je, učitava klasu, stvara instancu, inicijalizira je, poslužuje svaki zahtjev putem generirane metode usluge i na kraju je uništava.

  • 🔄 Sedam faza: Prijevod, kompilacija, učitavanje klase, instanciranje, inicijalizacija, obrada zahtjeva i uništavanje izvode se tim fiksnim redoslijedom.
  • 📄 Prijevod: Kontejner validira stranicu, a zatim zapisuje Java izvornu datoteku, pa demo.jsp postaje demo_jsp.java prije nego što se išta izvrši.
  • Kompilacija: Taj generirani izvorni kod kompajlira se u demo_jsp.class, koji Tomcat čuva u svom radnom direktoriju uz .java datoteku.
  • 🚀 Tri metode: jspInit() priprema stranicu jednom, _jspService() odgovara na svaki zahtjev, a jspDestroy() oslobađa resurse na kraju.
  • ???? Jedno pravilo: Funkciju _jspService() generira kontejner i autor stranice je nikada ne smije pisati ili poništavati.
  • 🗃️ Kuka za čišćenje: Nadjačavanje jspDestroy() je ispravno mjesto za zatvaranje veza s bazom podataka i otvaranje datoteka.

Faze životnog ciklusa JSP-a od prevođenja do uništenja

Što je životni ciklus JSP-a?

JSP životni ciklus definira se kao prevođenje JSP stranice u servlet, jer se JSP stranica mora pretvoriti u servlet prije nego što može obraditi zahtjeve za uslugom. Životni ciklus započinje stvaranjem JSP-a i završava uništavanjem instance servleta generirane iz njega.

Budući da je generirana klasa običan servlet, sve što već znate o servletu možetract se još uvijek primjenjuje. Java Kod koji kontejner piše je ono što se zapravo izvršava; JSP datoteka je samo izvorni kod koji održavate.

Različite faze životnog ciklusa JSP-a

Kada preglednik zatraži JSP, JSP engine prvo provjerava treba li kompajlirati stranicu. Ako JSP nikada nije kompajliran ili je modificiran od posljednje kompajlacije, tada JSP engine kompajlira stranicu.

Proces kompilacije JSP stranice uključuje tri koraka:

  • Raščlanjivanje JSP-a
  • Pretvaranje JSP-a u servlet
  • Sastavljanje servleta

JSP dijagram životnog ciklusa

Životni ciklus JSP-a prikazan je na dijagramu ispod, koji traces jednu stranicu od izvorne datoteke do klase koju kontejner izvršava.

Dijagram životnog ciklusa JSP-a koji prikazuje prevođenje, kompilaciju, učitavanje, instanciranje, inicijalizaciju, obradu zahtjeva i uništavanje

Sljedeći koraci objašnjavaju životni ciklus JSP-a:

  1. Prijevod JSP stranice
  2. Kompilacija JSP stranice (kompilacija JSP stranice u _jsp.java)
  3. Učitavanje klasa (_jsp.java se pretvara u datoteku klase _jsp.class)
  4. Instanciranje (kreira se objekt generiranog servleta)
  5. Inicijalizacija (kontejner poziva metodu jspInit())
  6. Obrada zahtjeva (kontejner poziva metodu _jspService())
  7. Uništi (kontejner poziva metodu jspDestroy())

Objašnjenje faza životnog ciklusa JSP-a

Pogledajmo svaku od gore navedenih točaka detaljnije.

1) Prijevod JSP stranice:

A Java Servlet datoteka se generira iz JSP izvorne datoteke. Ovo je prvi korak JSP životnog ciklusa. U fazi prevođenja, kontejner provjerava sintaktičku ispravnost JSP stranica i datoteka oznaka.

  • JSP kontejner interpretira standardne direktive i akcije te prilagođene akcije koje referenciraju biblioteke oznaka (sve su one dio JSP stranice i obuhvaćene su u JSP elementi tutorial) korišten na ovoj JSP stranici.
  • U gornjem slikovnom opisu, demo.jsp je u prvom koraku preveden u demo_jsp.java

Uzmimo primjer "demo.jsp" kao što je prikazano u nastavku:

Demo.jsp

<html>
<head>
<title>Demo JSP</title>
</head>
<%
int demvar=0;%>
<body>
Count is:
<% Out.println(demovar++); %>
<body>
</html>

Napomena o gornjem popisu: Reproducira se točno onako kako je objavljeno tako da odgovara generiranoj snimci zaslona servleta koja slijedi. Dva pravopisa u njemu neće se kompajlirati ako se doslovno kopiraju - varijabla je deklarirana kao demvar ali ispisan kao demovar, a implicitni izlazni objekt je out malim slovom, ne OutIspravite oboje prije nego što sami pokrenete stranicu.

Code Objašnjenje za Demo.jsp

Code Redak 1: početna oznaka html-a

Code Redak 2: Oznaka zaglavlja

Code Redak 3 – 4: Oznaka naslova, npr. Demo JSP, i zatvarajuća oznaka zaglavlja

Code Redak 5 – 6: Oznaka skriptleta u kojoj je inicijalizirana varijabla demo

Code Redak 7 – 8: U oznaci tijela, tekst koji će se ispisati u izlazu (Broj je: )

Code Redak 9: Oznaka skriptleta gdje pokušavamo ispisati varijablu demovar s njezinom inkrementiranom vrijednošću

Code Redak 10 – 11: Tijelo i HTML oznake su zatvorene

Demo JSP stranica se pretvara u demo_jsp servlet prikazan u donjem kodu.

Generirani izvorni kod servleta demo_jsp.java proizveden iz demo.js tijekom prevođenja

Code objašnjenje za Demo_jsp.java

Code Redak 1: Servlet klasa demo_jsp proširuje roditeljsku klasu HttpServlet

Code Redak 2 – 3: Nadjačavanje metode usluge JSP-a, tj. _jspService, koja kao parametre ima objekte HttpServletRequest i HttpServletResponse

Code Redak 4: Način otvaranja

Code Redak 5: Pozivanje metode getWriter() objekta odgovora za dobivanje vrijednosti PrintWriter objekt (ispisuje formatirani prikaz objekata u tekstualni izlazni tok)

Code Redak 6: Pozivanje metode setContentType objekta odgovora za postavljanje tipa sadržaja

Code Redak 7: Korištenje metode write() funkcije PrintWriter objekt za parsiranje html-a

Code Redak 8: Inicijalizacija varijable demovar na 0

Code Redak 9: Pozivanje metode write() funkcije PrintWriter objekt za parsiranje teksta

Code Redak 10: Pozivanje metode print() funkcije PrintWriter objekt za povećanje varijable demovar od 0 + 1 = 1. Stoga će izlaz biti 1

Code Redak 11: Korištenje metode write() funkcije PrintWriter objekt za parsiranje html-a

Izlaz:

Preglednik zatim prikazuje brojač, kao što je prikazano na snimci zaslona u nastavku.

Izlaz preglednika za ispis demo.js datoteke Broj je: 1

  • Ovdje možete vidjeti da je na snimci zaslona izlaz 1, jer je demvar inicijaliziran na 0, a zatim inkrementiran na 0 + 1 = 1

U gornjem primjeru,

  • demo.jsp je JSP gdje je jedna varijabla inicijalizirana i inkrementirana. Ovaj JSP se pretvara u servlet (demo_jsp.class) gdje JSP mehanizam učitava JSP stranicu i pretvara je u sadržaj servleta.
  • Kada se dogodi konverzija, sav tekst predloška pretvara se u naredbe println() i svi JSP elementi se pretvaraju u Java kodirati.

Ovo je način na koji se jednostavna JSP stranica prevodi u klasu servleta.

2) Kompilacija JSP stranice

  • Generirano Java servlet datoteka se kompajlira u Java klasa servleta
  • Prijevod Java Prijenos izvorne stranice u njezinu implementacijsku klasu može se dogoditi u bilo kojem trenutku između implementacije JSP stranice u kontejner i obrade JSP stranice.
  • U gornjem slikovnom opisu, demo_jsp.java je kompiliran u datoteku klase demo_jsp.class
  • Na Apache Tomcatu oba artefakta su zapisana u radnom direktoriju poslužitelja, u work/Catalina/localhost/<app>/org/apache/jsp, što je prvo mjesto koje treba provjeriti kada se mora dijagnosticirati pogreška u prijevodu

3) Učitavanje razreda

  • Klasa servleta koja je generirana iz JSP izvornog koda sada je učitana u kontejner

4) Instanciranje

  • U ovom koraku se generira objekt, tj. instanca klase.
  • Kontejner upravlja jednom ili više instanci ove klase kao odgovor na zahtjeve i druge događaje. JSP kontejner se obično gradi pomoću servlet kontejnera. JSP kontejner je proširenje servlet kontejnera, jer oba kontejnera podržavaju JSP i servlete.
  • Sučelje JspPage, koje pruža kontejner, deklarira metode jspInit() i jspDestroy().
  • Postoji sučelje HttpJspPage koje poslužuje HTTP zahtjeve, a sadrži i metodu usluge. Njegov potpis ovisi o protokolu, zbog čega kontejner generira tu metodu umjesto da traži od autora stranice da je deklarira.

5) Inicijalizacija

public void jspInit()
{
	//initializing the code
}
  • Metoda jspInit() inicijalizira instancu servleta koja je generirana iz JSP-a, a u ovoj fazi je poziva kontejner.
  • Nakon što je instanca kreirana, odmah nakon toga se poziva metoda init
  • Poziva se samo jednom tijekom životnog ciklusa JSP-a, a metoda za inicijalizaciju je deklarirana kao što je prikazano gore.

6) Obrada zahtjeva

void _jspservice(HttpServletRequest request HttpServletResponse response)
{
	//handling all request and responses
}
  • Metoda _jspService() se poziva od strane kontejnera za sve zahtjeve koje JSP stranica podigne tijekom svog životnog ciklusa.
  • Za ovu fazu, stranica mora proći kroz sve gore navedene faze i tek tada se može pozvati metoda usluge.
  • Prosljeđuje objekte zahtjeva i odgovora
  • Ova metoda se ne može poništiti jer je kontejner zapisuje tijekom prevođenja
  • Metoda je prikazana gore. Odgovorna je za rukovanje svim HTTP metodama, tj. GET, POST i ostalima.

7) Uništiti

public void _jspdestroy()
{
            //all clean up code
}
  • Kontejner također poziva metodu jspDestroy().
  • Ova metoda se poziva kada kontejner odluči da mu više nije potrebna instanca servleta za opsluživanje zahtjeva.
  • Nakon što se uputi poziv metode destroy, servlet je spreman za sakupljanje smeća.
  • Ovo je kraj životnog ciklusa.
  • Možemo nadjačati jspDestroy() kada izvodimo bilo kakvo čišćenje, poput otpuštanja veza s bazom podataka ili zatvaranja otvorenih datoteka.

Jedna napomena o imenovanju koju vrijedi prenijeti: od Jakarte EE 9 nadalje ovi tipovi žive u jakarta.servlet.jsp paket, a ne javax.servlet.jsp, tako da se stariji uvozi moraju ažurirati kada se aplikacija premjesti na trenutni poslužitelj.

Pitanja i odgovori

To je isti životni ciklus nakon prevođenja. JSP dodaje dvije faze ispred, prevođenje i kompilaciju, koje pretvaraju stranicu u izvornu datoteku servleta i klasu. Od učitavanja klase nadalje, servlet možetract se primjenjuje nepromijenjeno.

U radnom direktoriju poslužitelja, u work/Catalina/localhost/ /org/apache/jsp. I generirani .java izvorni kod i kompilirana .class datoteka se tamo nalaze, pa home.js postaje home_jsp.java i home_jsp.class.

Kontejner ga generira iz tijela stranice tijekom prevođenja. Njegov potpis ovisi o protokolu zahtjeva, pa ga specifikacija izostavlja iz JspPage sučelja i zabranjuje autorima stranica da ga sami deklariraju.

Generirani servlet već implementira init() za pohranu svog ServletConfig-a, a zatim poziva jspInit(). Autori stranica prepisuju jspInit() tako da se postavljanje spremnika nikada ne preskače, što je upravo ono što riskira ručno napisano prepisivanje init().

Predkompilacija prevodi i kompilira svaku stranicu prilikom izrade ili implementacije umjesto pri prvom zahtjevu. Uklanja kašnjenje prvog pojavljivanja, otkriva pogreške u prijevodu prije objavljivanja i omogućuje implementaciju bez kompajlera na poslužitelju.

I dalje je podržan kao Jakarta Server Pages. Glavna promjena je imenski prostor paketa: iz Jakarta EE 9 API se preselio s javax.servlet.jsp na jakarta.servlet.jsp, tako da se naslijeđeni uvozi moraju prepisati prije pokretanja na trenutnom poslužitelju.

AI asistenti čitaju generirani _jsp.java stog trace i mapiraju grešku kompilacije natrag na redak skriptleta koji uzrokuje probleme, što je najteži dio pogrešaka prijevoda. Također označavaju skriptlete koji pripadaju datoteci oznaka ili servletu.

Da. Copilot scaffoldira skriptlete, JSTL blokove, rukovanje obrascima i usklađivanje servlet klasa iz komentara. RevPogledajte izlaz za imenski prostor paketa Jakarta i za skriptlete koji bi trebali biti izrazni jezik, budući da prijedlozi često slijede starije tutorijale.

Sažmite ovu objavu uz: