Ž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.

Š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.
Sljedeći koraci objašnjavaju životni ciklus JSP-a:
- Prijevod JSP stranice
- Kompilacija JSP stranice (kompilacija JSP stranice u _jsp.java)
- Učitavanje klasa (_jsp.java se pretvara u datoteku klase _jsp.class)
- Instanciranje (kreira se objekt generiranog servleta)
- Inicijalizacija (kontejner poziva metodu jspInit())
- Obrada zahtjeva (kontejner poziva metodu _jspService())
- 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.
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.
- 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.



