JSP:n elinkaari
Mikä on JSP LifeCycle?
JSP-elinkaari määritellään JSP-sivun kääntämiseksi servletiksi, koska JSP-sivu on ensin muutettava servletiksi, jotta palvelupyynnöt voidaan käsitellä. Elinkaari alkaa JSP:n luomisesta ja päättyy sen hajoamiseen.
JSP:n elinkaaren eri vaiheet
Kun selain pyytää JSP:tä, JSP-moottori tarkistaa ensin, tarvitseeko sen kääntää sivu. Jos JSP on viimeksi käännetty tai viimeisin muutos on tehty JSP:ssä, JSP-moottori kääntää sivun.
JSP-sivun käännösprosessi sisältää kolme vaihetta:
- JSP:n jäsentäminen
- JSP:n muuttaminen servletiksi
- Serletin kääntäminen
JSP:n elinkaarikaavio
JSP:n elinkaari on kuvattu alla olevassa kaaviossa.
Seuraavat vaiheet selittävät JSP:n elinkaaren:
- Käännös JSP-sivulta
- JSP-sivun kääntäminen (JSP-sivun kokoaminen tiedostoon _jsp.java)
- Classloading (_jsp.java muunnetaan luokkatiedostoksi _jsp.class)
- Instanssi (luodun servletin objekti luodaan)
- Alustus(
_jspinit()
säilön kutsuma menetelmä) - Pyynnön käsittely (
_jspservice()
säilön kutsuma menetelmä) - Tuhoa (
_jspDestroy()
säilön kutsuma menetelmä)
Tehdään yksityiskohtaisempi yhteenveto yllä olevista kohdista:
1) JSP-sivun käännös:
A Java servlet-tiedosto luodaan JSP-lähdetiedostosta. Tämä on JSP:n elinkaaren ensimmäinen askel. Käännösvaiheessa säilö vahvistaa JSP-sivu- ja tagitiedostojen syntaktisen oikeellisuuden.
- JSP-säilö tulkitsee tällä JSP-sivulla käytetyt vakiomääräykset ja -toiminnot sekä tunnistekirjastoihin viittaavat mukautetut toiminnot (ne ovat kaikki osa JSP-sivua ja niitä käsitellään myöhemmässä osiossa).
- Yllä olevassa kuvallisessa kuvauksessa demo.jsp on käännetty demo_jsp.javaksi ensimmäisessä vaiheessa
- Otetaan esimerkki "demo.jsp":stä alla olevan kuvan mukaisesti:
Demo.jsp
<html> <head> <title>Demo JSP</title> </head> <% int demvar=0;%> <body> Count is: <% Out.println(demovar++); %> <body> </html>
Demo.jsp-koodin selitys
Koodirivi 1: html-aloitustunniste
Koodirivi 2: Head tag
Koodirivit 3-4: Title Tag eli Demo JSP ja sulkeva head tag
Koodirivit 5-6: Scriptlet-tunniste, jossa alustetaan muuttujan esittely
Koodirivit 7-8: body tagissa tulosteeseen tulostettava teksti (määrä on: )
Koodirivi 9: Scriplet-tunniste, johon yritetään tulostaa muuttuja demovar lisätyllä arvolla
Koodirivit 10–11: Body- ja HTML-tagit suljettu
Demo JSP -sivu muunnetaan demo_jsp-servletiksi alla olevassa koodissa.
Koodin selitys tiedostolle Demo_jsp.java
Koodirivi 1: Servlet-luokka demo_jsp laajentaa yläluokkaa HttpServlet
Koodirivit 2-3: jsp:n palvelumenetelmän ohittaminen eli _jspservice, jonka parametreina on HttpServletRequest- ja HttpServletResponse-objektit
Koodirivi 4: Avaustapa
Koodirivi 5: Menetelmän kutsuminen getWriter()
vastausobjektista PrintWriterobjectin saamiseksi (tulostaa objektien muotoillun esityksen tekstin tulostusvirtaan)
Koodirivi 6: Vastausobjektin setContentType-menetelmän kutsuminen sisältötyypin määrittämiseksi
Koodirivi 7: Käytössä write()
menetelmä, jossa PrintWriter-objekti yrittää jäsentää html:ää
Koodirivi 8: Alustetaan demovar-muuttuja nollaan
Koodirivi 9: Kutsumus write()
PrintWriter-objektin menetelmä tekstin jäsentämiseksi
Koodirivi 10: Kutsumus print()
PrintWriter-objektin menetelmä suurentaa muuttujan demovar arvosta 0+1=1. Näin ollen tulos on 1
Koodirivi 11: Käytössä write()
menetelmä, jossa PrintWriter-objekti yrittää jäsentää html:ää
lähtö:
- Tästä näet, että kuvakaappauksessa Output on 1, koska demvar alustetaan 0:ksi ja kasvatetaan sitten arvoon 0+1=1
Yllä olevassa esimerkissä
- demo.jsp on JSP, jossa yksi muuttuja alustetaan ja sitä lisätään. Tämä JSP muunnetaan servletiksi (demo_jsp.class), jossa JSP-moottori lataa JSP-sivun ja muuntaa servlet-sisällöksi.
- Kun muunnos tapahtuu, kaikki mallin teksti muunnetaan
println()
lausunnot ja kaikki JSP-elementtejä muunnetaan Java koodi.
Näin yksinkertainen JSP-sivu käännetään servlet-luokalle.
2) JSP-sivun kokoaminen
- Luotu java-servlet-tiedosto käännetään java-servlet-luokkaan
- Java-lähdesivun käännös toteutusluokkaansa voi tapahtua milloin tahansa JSP-sivun säilöön käyttöönoton ja JSP-sivun käsittelyn välillä.
- Yllä olevassa kuvallisessa kuvauksessa demo_jsp.java on käännetty luokkatiedostoon demo_jsp.class
3) Luokkatäyttö
- JSP-lähteestä ladattu servlet-luokka ladataan nyt säilöön
4) Instantiaatio
- Tässä vaiheessa luodaan objekti eli luokan ilmentymä.
- Säilö hallitsee yhtä tai useampaa tämän luokan esiintymää vastauksena pyyntöihin ja muihin tapahtumiin. Tyypillisesti JSP-säilö rakennetaan servlet-säilön avulla. JSP-säilö on servlet-säilön laajennus, koska sekä säilö tukee JSP:tä että servletiä.
- Säilön tarjoama JSPPage-liittymä tarjoaa
init()
jadestroy()
menetelmiä. - On olemassa käyttöliittymä HttpJSPPage, joka palvelee HTTP-pyyntöjä, ja se sisältää myös palvelumenetelmän.
5) Alustus
public void jspInit() { //initializing the code }
_jspinit()
-menetelmä käynnistää servlet-esiintymän, joka luotiin JSP:stä, ja säilö kutsuu sen tässä vaiheessa.- Kun ilmentymä on luotu, init-metodi kutsutaan välittömästi sen jälkeen
- Sitä kutsutaan vain kerran JSP:n elinkaaren aikana, alustusmenetelmä on ilmoitettu edellä esitetyllä tavalla
6) Pyynnön käsittely
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
_jspservice()
säilö kutsuu menetelmää kaikille JSP-sivun elinkaarensa aikana esittämille pyynnöille- Tässä vaiheessa sen on käytävä läpi kaikki yllä mainitut vaiheet ja sitten voidaan kutsua vain palvelumenetelmää.
- Se välittää pyyntö- ja vastausobjekteja
- Tätä menetelmää ei voi ohittaa
- Menetelmä on esitetty yllä: Se vastaa kaikkien HTTP-menetelmien eli GET, POST jne. luomisesta.
7) Tuhoa
public void _jspdestroy() { //all clean up code }
_jspdestroy()
Säiliö kutsuu myös menetelmän- Tätä menetelmää kutsutaan, kun säilö päättää, ettei se enää tarvitse servlet-ilmentymää palvelemaan pyyntöjä.
- Kun tuhoamismenetelmää kutsutaan, servlet on valmis roskien keräämiseen
- Tämä on elinkaaren loppu.
- Voimme ohittaa
jspdestroy()
menetelmää, kun suoritamme siivouksen, kuten tietokantayhteyksien vapauttamisen tai avoimien tiedostojen sulkemisen.