JSP životni ciklus
Što je JSP LifeCycle?
Životni ciklus JSP-a definiran je kao prijevod JSP stranice u servlet budući da se JSP stranica najprije mora pretvoriti u servlet kako bi obradila zahtjeve za uslugom. Životni ciklus počinje stvaranjem JSP-a i završava njegovim raspadom.
Različite faze životnog ciklusa JSP-a
Kada preglednik zatraži JSP, JSP motor prvo provjerava treba li prevesti stranicu. Ako je JSP posljednji put kompajliran ili je nedavna izmjena učinjena u JSP-u, tada JSP mehanizam 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 donjem dijagramu.
Sljedeći koraci objašnjavaju životni ciklus JSP-a:
- Prijevod JSP stranice
- Kompilacija JSP stranice (Kompilacija JSP stranice u _jsp.java)
- Učitavanje klase (_jsp.java se pretvara u datoteku klase _jsp.class)
- Instancija (stvara se objekt generiranog servleta)
- Inicijalizacija (
_jspinit()
metodu poziva spremnik) - Obrada zahtjeva (
_jspservice()
metodu poziva spremnik) - Uništi (
_jspDestroy()
metoda koju poziva spremnik)
Dopustimo detaljniji sažetak gore navedenih točaka:
1) Prijevod JSP stranice:
A Java servlet datoteka se generira iz JSP izvorne datoteke. Ovo je prvi korak JSP životnog ciklusa. U fazi prijevoda, spremnik provjerava sintaktičku ispravnost JSP stranica i datoteka oznaka.
- JSP spremnik tumači standardne direktive i radnje te prilagođene radnje koje se odnose na biblioteke oznaka (sve su one dio JSP stranice i o njima će se raspravljati u kasnijem odjeljku) koje se koriste na ovoj JSP stranici.
- U gornjem slikovnom opisu, demo.jsp je preveden u demo_jsp.java u prvom koraku
- 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>
Objašnjenje koda za Demo.jsp
Kodna linija 1: html početna oznaka
Kodna linija 2: Oznaka za glavu
Kodna linija 3 – 4: Oznaka naslova tj. demo JSP i završna oznaka zaglavlja
Kodna linija 5 – 6: Oznaka skriptleta u kojoj se inicijalizira varijabla demo
Kodna linija 7 – 8: U oznaci tijela, tekst koji će se ispisati u izlazu (Broj je: )
Redak koda 9: Oznaka skripte gdje pokušava ispisati varijablu demovar s povećanom vrijednošću
Redak koda 10 – 11: Body i HTML oznake su zatvorene
Demo JSP stranica pretvara se u demo_jsp servlet u donjem kodu.
Objašnjenje koda za Demo_jsp.java
Kodna linija 1: Servlet klasa demo_jsp proširuje nadređenu klasu HttpServlet
Kodna linija 2 – 3: Nadjačavanje metode usluge jsp tj. _jspservice koja ima HttpServletRequest i HttpServletResponse objekte kao svoje parametre
Kodna linija 4: Način otvaranja
Kodna linija 5: Pozivanje metode getWriter()
objekta odgovora za dobivanje PrintWriterobject (ispisuje formatiranu reprezentaciju objekata u izlazni tok teksta)
Kodna linija 6: Pozivanje metode setContentType objekta odgovora za postavljanje vrste sadržaja
Kodna linija 7: Korištenje write()
metoda PrintWriter objekta koji pokušava analizirati html
Kodna linija 8: Pokretanje varijable demovar na 0
Kodna linija 9: Zovem write()
metoda PrintWriter objekta za raščlanjivanje teksta
Kodna linija 10: Zovem print()
metoda PrintWriter objekta za povećanje varijable demovar od 0+1=1. Stoga će izlaz biti 1
Kodna linija 11: Korištenje write()
metoda PrintWriter objekta koji pokušava analizirati html
Izlaz:
- Ovdje možete vidjeti da je na snimci zaslona izlaz 1 jer je demvar inicijaliziran na 0, a zatim povećan na 0+1=1
U gornjem primjeru,
- demo.jsp je JSP gdje se jedna varijabla inicijalizira i povećava. Ovaj JSP se pretvara u servlet (demo_jsp.class) pri čemu JSP mehanizam učitava JSP stranicu i pretvara u sadržaj servleta.
- Kada se konverzija dogodi, sav tekst predloška se pretvara u
println()
izjave i sve 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
- Generirana datoteka java servleta kompajlira se u klasu java servleta
- Prijevod java izvorne stranice u njezinu klasu implementacije može se dogoditi u bilo kojem trenutku između postavljanja JSP stranice u spremnik i obrade JSP stranice.
- U gornjem slikovnom opisu demo_jsp.java kompilira se u datoteku klase demo_jsp.class
3) Učitavanje razreda
- Klasa servleta koja je učitana iz JSP izvora sada je učitana u spremnik
4) Instanciranje
- U ovom koraku generira se objekt tj. instanca klase.
- Spremnik upravlja jednom ili više instanci ove klase kao odgovor na zahtjeve i druge događaje. Obično se JSP spremnik gradi pomoću spremnika servleta. JSP spremnik je proširenje servlet spremnika budući da i spremnik podržava JSP i servlet.
- Sučelje JSPPage koje pruža spremnik pruža
init()
idestroy()
metode. - Postoji sučelje HttpJSPPage koje poslužuje HTTP zahtjeve, a sadrži i servisnu metodu.
5) Inicijalizacija
public void jspInit() { //initializing the code }
_jspinit()
metoda će pokrenuti instancu servleta koja je generirana iz JSP-a i pozvati će je spremnik u ovoj fazi.- Nakon što se instanca stvori, init metoda će se odmah nakon toga pozvati
- Poziva se samo jednom tijekom životnog ciklusa JSP-a, metoda za inicijalizaciju se deklarira kao što je prikazano gore
6) Obrada zahtjeva
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
_jspservice()
metodu poziva spremnik za sve zahtjeve koje podigne JSP stranica tijekom svog životnog ciklusa- Za ovu fazu mora proći sve gore navedene faze i tada se može pozvati samo servisna metoda.
- Prolazi objekte zahtjeva i odgovora
- Ova se metoda ne može poništiti
- Metoda je prikazana gore: odgovorna je za generiranje svih HTTP metoda, npr. GET, POST, itd.
7) Uništiti
public void _jspdestroy() { //all clean up code }
_jspdestroy()
metodu također poziva spremnik- Ova se metoda poziva kada spremnik odluči da više ne treba instancu servleta za servisiranje zahtjeva.
- Kada se izvrši poziv za uništavanje metode, servlet je spreman za sakupljanje smeća
- Ovo je kraj životnog ciklusa.
- Možemo nadjačati
jspdestroy()
kada izvodimo bilo kakvo čišćenje kao što je otpuštanje veza s bazom podataka ili zatvaranje otvorenih datoteka.