Ciclul de viață JSP: Faze și diagramă explicate
⚡ Rezumat inteligent
Ciclul de viață JSP descrie modul în care un container traduce o pagină într-un servlet, o compilează, încarcă clasa, creează o instanță, o inițializează, deservește fiecare cerere prin metoda de serviciu generată și, în final, o distruge.
Ce este ciclul de viață al unui JSP?
Ciclul de viață JSP este definit ca traducerea unei pagini JSP într-un servlet, deoarece o pagină JSP trebuie convertită într-un servlet înainte de a putea procesa cererile de serviciu. Ciclul de viață începe cu crearea JSP-ului și se termină cu distrugerea instanței servlet generate de acesta.
Deoarece clasa generată este un servlet obișnuit, tot ce știi deja despre servlet conțintracse aplică în continuare. Java Codul scris de container este cel care rulează efectiv; fișierul JSP este doar sursa pe care o întrețineți.
Diferite faze ale ciclului de viață JSP
Când browserul solicită un JSP, motorul JSP verifică mai întâi dacă trebuie să compileze pagina. Dacă JSP-ul nu a fost niciodată compilat sau dacă a fost modificat de la ultima compilare, atunci motorul JSP compilează pagina.
Procesul de compilare a unei pagini JSP implică trei pași:
- Analiza JSP
- Transformarea JSP în servlet
- Compilarea servlet-ului
Diagrama ciclului de viață JSP
Ciclul de viață al unui JSP este reprezentat în diagrama de mai jos, care traco singură pagină de la fișierul sursă până la clasa pe care o execută containerul.
Următorii pași explică ciclul de viață al JSP:
- Traducerea paginii JSP
- Compilarea paginii JSP (compilarea paginii JSP în _jsp.java)
- Încărcarea claselor (_jsp.java este convertit în fișierul de clasă _jsp.class)
- Instanțiere (se creează un obiect al servletului generat)
- Inițializare (metoda jspInit() este invocată de container)
- Procesarea cererilor (metoda _jspService() este invocată de container)
- Distruge (metoda jspDestroy() este invocată de container)
Fazele ciclului de viață JSP explicate
Să analizăm fiecare dintre punctele de mai sus mai detaliat.
1) Traducerea paginii JSP:
A Java Un fișier servlet este generat dintr-un fișier sursă JSP. Acesta este primul pas al ciclului de viață JSP. În faza de traducere, containerul validează corectitudinea sintactică a paginii JSP și a fișierelor de etichete.
- Containerul JSP interpretează directivele și acțiunile standard, precum și acțiunile personalizate care fac referire la bibliotecile de etichete (toate fac parte din pagina JSP și sunt acoperite în elemente JSP tutorial) utilizat în această pagină JSP.
- În descrierea ilustrată de mai sus, fișierul demo.jsp este tradus în demo_jsp.java în primul pas.
Să luăm un exemplu de „demo.jsp”, așa cum se arată mai jos:
Demo.jsp
<html>
<head>
<title>Demo JSP</title>
</head>
<%
int demvar=0;%>
<body>
Count is:
<% Out.println(demovar++); %>
<body>
</html>
Notă privind lista de mai sus: este reprodusă exact așa cum a fost publicată, astfel încât să corespundă cu captura de ecran a servletului generat care urmează. Două variante ortografice din aceasta nu se vor compila dacă sunt copiate ad litteram — variabila este declarată ca demvar dar tipărit ca demovar, iar obiectul de ieșire implicit este out cu literă mică, nu OutCorectați ambele înainte de a rula pagina singur.
Code Explicație pentru Demo.jsp
Code Linia 1: etichetă de început html
Code Linia 2: Etichetă antet
Code Linia 3 – 4: Eticheta de titlu, de exemplu Demo JSP, și eticheta de închidere head
Code Linia 5 – 6: Eticheta scriptlet în care este inițializată variabila demo
Code Linia 7 – 8: În eticheta body, un text care va fi afișat în rezultat (Numărul este: )
Code Linia 9: Eticheta scriptlet unde încercăm să afișăm variabila demovar cu valoarea sa incrementată
Code Linia 10 – 11: Etichetele Body și HTML închise
Pagina JSP Demo este convertită în servletul demo_jsp așa cum se arată în codul de mai jos.
Code explicație pentru Demo_jsp.java
Code Linia 1: Clasa servlet demo_jsp extinde clasa părinte HttpServlet
Code Linia 2 – 3: Suprascrierea metodei de service a JSP-ului, adică _jspService, care are ca parametri obiectele HttpServletRequest și HttpServletResponse
Code Linia 4: Metoda de deschidere
Code Linia 5: Apelarea metodei getWriter() a obiectului de răspuns pentru a obține o imprimareWriter obiect (tipărește o reprezentare formatată a obiectelor într-un flux de ieșire text)
Code Linia 6: Apelarea metodei setContentType a obiectului de răspuns pentru a seta tipul de conținut
Code Linia 7: Utilizarea metodei write() din PrintWriter obiect pentru analizarea codului html
Code Linia 8: Inițializarea variabilei demovar la 0
Code Linia 9: Apelarea metodei write() a funcției PrintWriter obiect pentru a analiza textul
Code Linia 10: Apelarea metodei print() a funcției PrintWriter obiect pentru a incrementa variabila demovar de la 0 + 1 = 1. Prin urmare, ieșirea va fi 1
Code Linia 11: Utilizarea metodei write() din PrintWriter obiect pentru analizarea codului html
ieșire:
Apoi, browserul afișează contorul, așa cum se arată în captura de ecran de mai jos.
- Aici puteți vedea că în captură de ecran ieșirea este 1, deoarece demvar este inițializat la 0 și apoi incrementat la 0 + 1 = 1
În exemplul de mai sus,
- demo.jsp este un JSP în care o variabilă este inițializată și incrementată. Acest JSP este convertit într-un servlet (demo_jsp.class) în care motorul JSP încarcă pagina JSP și o convertește în conținut de servlet.
- Când are loc conversia, tot textul șablonului este convertit în instrucțiuni println() și toate elementele JSP sunt convertite în Java cod.
Acesta este modul în care o pagină JSP simplă este tradusă într-o clasă servlet.
2) Compilarea paginii JSP
- Generat Java Fișierul servlet este compilat într-un Java clasa servlet
- Traducerea Java Transformarea paginii sursă în clasa sa de implementare poate avea loc oricând între implementarea paginii JSP în container și procesarea paginii JSP.
- În descrierea ilustrată de mai sus, demo_jsp.java este compilat într-un fișier de clasă demo_jsp.class
- Pe Apache Tomcat, ambele artefacte sunt scrise în directorul de lucru al serverului, în
work/Catalina/localhost/<app>/org/apache/jsp, care este primul loc de căutat atunci când trebuie diagnosticată o eroare de traducere
3) Încărcare de clasă
- Clasa servlet generată din sursa JSP este acum încărcată în container.
4) Instanciare
- În acest pas se generează obiectul, adică instanța clasei.
- Containerul gestionează una sau mai multe instanțe ale acestei clase ca răspuns la cereri și alte evenimente. De obicei, un container JSP este construit folosind un container servlet. Un container JSP este o extensie a unui container servlet, deoarece ambele containere acceptă JSP și servlet-uri.
- Interfața JspPage, furnizată de container, declară metodele jspInit() și jspDestroy().
- Există o interfață HttpJspPage care deservește cereri HTTP și conține și metoda de service. Semnătura sa depinde de protocol, motiv pentru care containerul generează acea metodă în loc să ceară autorului paginii să o declare.
5) Inițializare
public void jspInit() { //initializing the code }
- Metoda jspInit() inițializează instanța servlet generată din JSP și este invocată de container în această fază.
- Odată ce instanța este creată, metoda init este invocată imediat după aceea
- Este apelată o singură dată în timpul unui ciclu de viață JSP, iar metoda de inițializare este declarată așa cum se arată mai sus.
6) Procesarea cererii
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
- Metoda _jspService() este invocată de container pentru toate cererile generate de pagina JSP pe parcursul ciclului său de viață.
- Pentru această fază, pagina trebuie să treacă prin toate fazele de mai sus și numai atunci poate fi invocată metoda de service.
- Transmite obiectele de cerere și răspuns
- Această metodă nu poate fi suprascrisă, deoarece containerul o scrie în timpul traducerii.
- Metoda este prezentată mai sus. Este responsabilă pentru gestionarea tuturor metodelor HTTP, adică GET, POST și restul.
7) Distrugeți
public void _jspdestroy() { //all clean up code }
- Metoda jspDestroy() este, de asemenea, invocată de container
- Această metodă este apelată atunci când containerul decide că nu mai are nevoie de instanța servlet pentru a răspunde cererilor.
- Odată ce apelul metodei destroy este efectuat, servletul este gata pentru colectarea gunoiului.
- Acesta este sfârșitul ciclului de viață.
- Putem suprascrie jspDestroy() atunci când efectuăm orice curățare, cum ar fi eliberarea conexiunilor la baza de date sau închiderea fișierelor deschise.
O notă privind denumirea care merită menționată: de la Jakarta EE 9 încoace, aceste tipuri trăiesc în jakarta.servlet.jsp pachet în loc de javax.servlet.jsp, deci importurile mai vechi trebuie actualizate atunci când o aplicație este mutată pe un server curent.




