Cykl życia JSP: wyjaśnienie faz i diagramu
⚡ Inteligentne podsumowanie
Cykl życia JSP opisuje, w jaki sposób kontener tłumaczy stronę na serwlet, kompiluje ją, ładuje klasę, tworzy instancję, inicjuje ją, obsługuje każde żądanie za pośrednictwem wygenerowanej metody usługi i na koniec ją niszczy.

Czym jest cykl życia JSP?
Cykl życia JSP Definiuje się ją jako translację strony JSP na serwlet, ponieważ strona JSP musi zostać przekonwertowana na serwlet, zanim będzie mogła przetwarzać żądania usług. Cykl życia rozpoczyna się od utworzenia strony JSP i kończy się zniszczeniem wygenerowanej z niej instancji serwletu.
Ponieważ wygenerowana klasa jest zwykłym serwletem, wszystko, co już wiesz o serwlecie,tracNadal obowiązuje. Java kod zapisany przez kontener jest tym, co faktycznie działa; plik JSP jest tylko źródłem, które utrzymujesz.
Różne fazy cyklu życia JSP
Gdy przeglądarka prosi o plik JSP, silnik JSP najpierw sprawdza, czy strona wymaga kompilacji. Jeśli plik JSP nigdy nie był kompilowany lub został zmodyfikowany od ostatniej kompilacji, silnik JSP kompiluje stronę.
Proces kompilacji strony JSP składa się z trzech kroków:
- Parsowanie JSP
- Przekształcanie JSP w serwlet
- Kompilacja serwletu
Diagram cyklu życia JSP
Cykl życia JSP przedstawiono na poniższym diagramie, który tracto pojedyncza strona od pliku źródłowego do klasy wykonywanej przez kontener.
Poniższe kroki wyjaśniają cykl życia JSP:
- Tłumaczenie strony JSP
- Kompilacja strony JSP (kompilacja strony JSP do pliku _jsp.java)
- Ładowanie klas (plik _jsp.java jest konwertowany do pliku klasy _jsp.class)
- Instancjacja (tworzony jest obiekt wygenerowanego serwletu)
- Inicjalizacja (metoda jspInit() jest wywoływana przez kontener)
- Przetwarzanie żądań (metoda _jspService() jest wywoływana przez kontener)
- Zniszcz (metoda jspDestroy() jest wywoływana przez kontener)
Wyjaśnienie faz cyklu życia JSP
Przyjrzyjmy się każdemu z powyższych punktów bardziej szczegółowo.
1) Tłumaczenie strony JSP:
A Java Plik serwletu jest generowany z pliku źródłowego JSP. To pierwszy krok cyklu życia JSP. W fazie tłumaczenia kontener weryfikuje poprawność składniową plików strony JSP i tagów.
- Kontener JSP interpretuje standardowe dyrektywy i akcje oraz akcje niestandardowe odwołujące się do bibliotek tagów (wszystkie są częścią strony JSP i są omówione w Elementy JSP (samouczek) używany na tej stronie JSP.
- W powyższym opisie graficznym demo.jsp jest w pierwszym kroku tłumaczone na demo_jsp.java
Weźmy na przykład plik „demo.jsp” pokazany poniżej:
Demo.jsp
<html>
<head>
<title>Demo JSP</title>
</head>
<%
int demvar=0;%>
<body>
Count is:
<% Out.println(demovar++); %>
<body>
</html>
Uwaga dotycząca powyższej oferty: Jest on powielany dokładnie w takiej formie, w jakiej został opublikowany, aby pasował do wygenerowanego zrzutu ekranu serwletu, który znajduje się poniżej. Dwie pisownie w nim nie skompilują się, jeśli zostaną skopiowane dosłownie — zmienna jest zadeklarowana jako demvar ale wydrukowano jako demovar, a niejawny obiekt wyjściowy to out małymi literami, nie Out. Popraw oba elementy przed uruchomieniem strony.
Code Wyjaśnienie dla Demo.jsp
Code Linia 1: znacznik początkowy html
Code Linia 2: Tag nagłówka
Code Linia 3–4: znacznik tytułu, czyli Demo JSP i zamykający znacznik head
Code Linia 5–6: Tag skryptletu, w którym inicjowana jest zmienna demo
Code Linia 7–8: W znaczniku body znajduje się tekst, który ma zostać wydrukowany na wyjściu (liczba wynosi: ).
Code Linia 9: Tag skryptletu, w którym próbujemy wydrukować zmienną demovar z jej zwiększoną wartością
Code Linia 10 – 11: Zamknięte znaczniki Body i HTML
Strona JSP Demo jest konwertowana do serwletu demo_jsp pokazanego w poniższym kodzie.
Code wyjaśnienie dla Demo_jsp.java
Code Wiersz 1: Klasa serwletu demo_jsp rozszerza klasę nadrzędną HttpServlet
Code Linia 2–3: Nadpisywanie metody usługi JSP, tj. _jspService, która ma jako parametry obiekty HttpServletRequest i HttpServletResponse
Code Linia 4: Metoda otwierania
Code Linia 5: Wywołanie metody getWriter() obiektu odpowiedzi, aby uzyskać wydrukWriter obiekt (drukuje sformatowaną reprezentację obiektów do strumienia wyjściowego tekstu)
Code Linia 6: Wywołanie metody setContentType obiektu odpowiedzi w celu ustawienia typu zawartości
Code Linia 7: Korzystanie z metody write() polecenia PrintWriter obiekt do analizy HTML
Code Linia 8: Inicjalizacja zmiennej demovar na 0
Code Linia 9: Wywołanie metody write() polecenia PrintWriter obiekt do analizy tekstu
Code Linia 10: Wywołanie metody print() obiektu PrintWriter obiekt, aby zwiększyć zmienną demovar od 0 + 1 = 1. W związku z tym wyjście będzie wynosić 1
Code Linia 11: Korzystanie z metody write() polecenia PrintWriter obiekt do analizy HTML
Wyjście:
Następnie przeglądarka renderuje licznik, jak pokazano na zrzucie ekranu poniżej.
- Tutaj widać, że na zrzucie ekranu wyjście wynosi 1, ponieważ demvar jest inicjowany na 0, a następnie zwiększany do 0 + 1 = 1
W powyższym przykładzie
- demo.jsp to plik JSP, w którym inicjowana i inkrementowana jest jedna zmienna. Ten plik JSP jest konwertowany na serwlet (demo_jsp.class), gdzie silnik JSP ładuje stronę JSP i konwertuje ją na zawartość serwletu.
- Podczas konwersji cały tekst szablonu jest konwertowany na polecenia println(), a wszystkie elementy JSP są konwertowane na Java kod.
W ten sposób prosta strona JSP jest tłumaczona na klasę serwletu.
2) Kompilacja strony JSP
- Wygenerowany plik Java plik serwletu jest kompilowany do Java klasa serwletu
- Tłumaczenie Java Przeniesienie strony źródłowej do jej klasy implementacyjnej może nastąpić w dowolnym momencie pomiędzy wdrożeniem strony JSP w kontenerze a przetworzeniem strony JSP.
- W powyższym opisie obrazkowym demo_jsp.java jest kompilowane do pliku klasy demo_jsp.class
- Na serwerze Apache Tomcat oba artefakty są zapisywane w katalogu roboczym serwera, w
work/Catalina/localhost/<app>/org/apache/jsp, które jest pierwszym miejscem, w którym należy szukać informacji, gdy trzeba zdiagnozować błąd tłumaczenia
3) Ładowanie klas
- Klasa serwletu wygenerowana ze źródła JSP jest teraz ładowana do kontenera
4) Instancja
- Na tym etapie generowany jest obiekt, czyli instancja klasy.
- Kontener zarządza jedną lub wieloma instancjami tej klasy w odpowiedzi na żądania i inne zdarzenia. Zazwyczaj kontener JSP jest budowany przy użyciu kontenera serwletów. Kontener JSP jest rozszerzeniem kontenera serwletów, ponieważ oba kontenery obsługują zarówno JSP, jak i serwlety.
- Interfejs JspPage udostępniany przez kontener deklaruje metody jspInit() i jspDestroy().
- Istnieje interfejs HttpJspPage, który obsługuje żądania HTTP i zawiera również metodę usługi. Jego sygnatura zależy od protokołu, dlatego kontener generuje tę metodę zamiast prosić autora strony o jej zadeklarowanie.
5) Inicjalizacja
public void jspInit() { //initializing the code }
- Metoda jspInit() inicjuje instancję serwletu wygenerowaną ze strony JSP i jest wywoływana przez kontener w tej fazie.
- Po utworzeniu instancji metoda init jest wywoływana bezpośrednio po tym
- Jest wywoływana tylko raz w cyklu życia JSP, a metoda inicjalizacji jest deklarowana w sposób pokazany powyżej
6) Przetworzenie żądania
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
- Metoda _jspService() jest wywoływana przez kontener dla wszystkich żądań zgłoszonych przez stronę JSP w trakcie jej cyklu życia
- Na tym etapie strona musi przejść przez wszystkie fazy opisane powyżej i dopiero wtedy można wywołać metodę usługi.
- Przekazuje obiekty żądania i odpowiedzi
- Tej metody nie można zastąpić, ponieważ kontener zapisuje ją podczas tłumaczenia
- Metoda pokazana powyżej. Odpowiada ona za obsługę wszystkich metod HTTP, tj. GET, POST i pozostałych.
7) Zniszcz
public void _jspdestroy() { //all clean up code }
- Metoda jspDestroy() jest również wywoływana przez kontener
- Ta metoda jest wywoływana, gdy kontener uzna, że nie potrzebuje już instancji serwletu do obsługi żądań.
- Po wywołaniu metody destroy serwlet jest gotowy do zbierania śmieci
- To koniec cyklu życia.
- Możemy zastąpić jspDestroy(), gdy wykonujemy czyszczenie, takie jak zwalnianie połączeń z bazą danych lub zamykanie otwartych plików.
Warto przytoczyć jedną uwagę dotyczącą nazewnictwa: od Dżakarty EE 9 w górę tego typu osoby mieszkają w jakarta.servlet.jsp pakiet, a nie javax.servlet.jsp, więc starsze importy muszą zostać zaktualizowane, gdy aplikacja jest przenoszona na bieżący serwer.



