JSP életciklus
Mi az a JSP LifeCycle?
A JSP-életciklus a JSP-oldal servletté való fordítása, mivel a JSP-oldalt először szervletté kell alakítani a szolgáltatáskérések feldolgozásához. Az életciklus a JSP létrehozásával kezdődik, és annak szétesésével ér véget.
A JSP életciklusának különböző fázisai
Amikor a böngésző JSP-t kér, a JSP-motor először ellenőrzi, hogy le kell-e fordítania az oldalt. Ha a JSP-t utoljára fordították le, vagy a legutóbbi módosítást a JSP-ben hajtották végre, akkor a JSP-motor fordítja le az oldalt.
A JSP oldal fordítási folyamata három lépésből áll:
- A JSP elemzése
- A JSP servletté alakítása
- A szervlet összeállítása
JSP életciklus diagram
A JSP életciklusa az alábbi ábrán látható.
A következő lépések ismertetik a JSP életciklusát:
- A JSP oldal fordítása
- JSP-oldal fordítása (JSP-oldal fordítása _jsp.java-ba)
- Osztálybetöltés (a _jsp.java _jsp.class osztályfájllá alakul)
- Példányosítás (a generált szervlet objektuma létrejön)
- Inicializálás(
_jspinit()
a metódust a tároló hívja meg) - Kérelem feldolgozása (
_jspservice()
metódust hívja meg a tároló) - Elpusztítani (
_jspDestroy()
a tároló által meghívott módszer)
Adjunk részletesebb összefoglalót a fenti pontokról:
1) A JSP oldal fordítása:
A Java servlet fájl egy JSP forrásfájlból jön létre. Ez a JSP életciklusának első lépése. A fordítási fázisban a tároló ellenőrzi a JSP-oldal- és címkefájlok szintaktikai helyességét.
- A JSP-tároló értelmezi az ezen a JSP-oldalon használt szabványos direktívákat és műveleteket, valamint a címkekönyvtárra hivatkozó egyéni műveleteket (mind a JSP oldal részét képezik, és a későbbi szakaszban lesz szó róla).
- A fenti képi leírásban a demo.jsp első lépésben demo_jsp.java-ra van fordítva
- Vegyünk egy példát a „demo.jsp”-re az alábbiak szerint:
Demo.jsp
<html> <head> <title>Demo JSP</title> </head> <% int demvar=0;%> <body> Count is: <% Out.println(demovar++); %> <body> </html>
A Demo.jsp kód magyarázata
1. kódsor: html start tag
2. kódsor: Fejcímke
Kódsor 3-4: Title Tag pl. Demo JSP és záró head tag
Kódsor 5-6: Scriptlet címke, ahol a változó demo inicializálása
Kódsor 7-8: A body címkében a kimenetben nyomtatandó szöveg (A szám: )
9. kódsor: Scriplet címke, ahol a demovar változót növekményes értékkel próbálja kinyomtatni
10–11. kódsor: Body és HTML címkék zárva
A demo JSP oldal az alábbi kódban demo_jsp servletté alakul.
A Demo_jsp.java kód magyarázata
1. kódsor: A demo_jsp szervlet osztály kiterjeszti a HttpServlet szülőosztályt
Kódsor 2-3: A jsp, azaz a _jspservice szolgáltatási metódusának felülbírálása, amelynek paraméterei a HttpServletRequest és a HttpServletResponse objektumok
4. kódsor: Nyitás módja
5. kódsor: A metódus meghívása getWriter()
válaszobjektum a PrintWriterobject lekéréséhez (az objektumok formázott reprezentációját nyomtatja ki a szöveges kimeneti adatfolyamba)
6. kódsor: A válaszobjektum setContentType metódusának meghívása a tartalomtípus beállításához
7. kódsor: Használata write()
A PrintWriter objektum módszere megpróbálja elemezni a html-t
8. kódsor: A demovar változó inicializálása 0-ra
9. kódsor: Hívás write()
a PrintWriter objektum módszere a szöveg elemzéséhez
10. kódsor: Hívás print()
a PrintWriter objektum metódusa a demovar változó növelésére 0+1=1 értékről. Így a kimenet 1 lesz
11. kódsor: Használata write()
A PrintWriter objektum módszere megpróbálja elemezni a html-t
output:
- Itt látható, hogy a képernyőképen az Output értéke 1, mert a demvar 0-ra inicializálva, majd 0+1=1-re nő.
A fenti példában
- A demo.jsp egy JSP, amelyben egy változó inicializálása és növelése történik. Ezt a JSP-t a rendszer servletté alakítja (demo_jsp.class ), ahol a JSP-motor betölti a JSP-oldalt, és szervlet-tartalommá alakítja át.
- Amikor az átalakítás megtörténik, az összes sablonszöveg erre konvertálódik
println()
nyilatkozatok és minden JSP elemek átalakítják Java kód.
Így fordítható le egy egyszerű JSP oldal servlet osztályba.
2) A JSP oldal összeállítása
- Az előállított java servlet fájlt java szervlet osztályba fordítják
- A Java-forrásoldal fordítása a megvalósítási osztályba bármikor megtörténhet a JSP-oldalnak a tárolóba való telepítése és a JSP-oldal feldolgozása között.
- A fenti képi leírásban a demo_jsp.java egy demo_jsp.class osztályfájlba van fordítva
3) Osztálybetöltés
- A JSP-forrásból betöltött szervlet osztály most betöltődik a tárolóba
4) Példányosítás
- Ebben a lépésben létrejön az objektum, azaz az osztály példánya.
- A tároló ennek az osztálynak egy vagy több példányát kezeli a kérésekre és egyéb eseményekre adott válaszokban. A JSP-tárolók általában egy szervlet-tároló használatával készülnek. A JSP-tároló a szervlet-tároló kiterjesztése, mivel a tároló egyaránt támogatja a JSP-t és a szervletet.
- A konténer által biztosított JSPPage interfészt biztosít
init()
és adestroy()
mód. - Van egy HttpJSPPage interfész, amely a HTTP kéréseket szolgálja ki, és ez tartalmazza a szolgáltatási metódust is.
5) Inicializálás
public void jspInit() { //initializing the code }
_jspinit()
metódus elindítja a JSP-ből előállított szervlet példányt, és ebben a fázisban a tároló meghívja.- A példány létrehozása után az init metódus azonnal meghívásra kerül
- A JSP életciklusa során csak egyszer hívják meg, az inicializálási módszert a fentiek szerint deklarálják
6) Kérelem feldolgozása
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
_jspservice()
metódust a tároló hívja meg a JSP-oldal által életciklusa során feltett összes kérésre- Ehhez a fázishoz az összes fenti fázison keresztül kell mennie, majd csak a szolgáltatási metódus hívható meg.
- Kérés és válasz objektumokat ad át
- Ez a módszer nem bírálható felül
- A módszer fent látható: Felelős az összes HTTP metódus generálásáért, pl. GET, POST stb.
7) Pusztítsd el
public void _jspdestroy() { //all clean up code }
_jspdestroy()
metódust is meghívja a tároló- Ez a metódus akkor hívódik meg, amikor a tároló úgy dönt, hogy már nincs szüksége a szervlet példányra a kérések kiszolgálásához.
- Amikor a hívás megtörténik, a szervlet készen áll a szemétgyűjtésre
- Ez az életciklus vége.
- Felülírhatjuk
jspdestroy()
módszerrel, amikor bármilyen tisztítást végzünk, például felszabadítjuk az adatbázis-kapcsolatokat vagy bezárjuk a nyitott fájlokat.