Cykl życia JSP
Co to jest cykl życia JSP?
Cykl życia JSP definiuje się jako translację strony JSP na serwlet, ponieważ strona JSP musi zostać najpierw przekonwertowana na serwlet, aby móc przetworzyć żądania usług. Cykl życia rozpoczyna się wraz z utworzeniem JSP i kończy się jej rozpadem.
Różne fazy cyklu życia JSP
Kiedy przeglądarka pyta o stronę JSP, silnik JSP najpierw sprawdza, czy konieczne jest skompilowanie strony. Jeśli strona JSP została skompilowana jako ostatnia lub ostatnia modyfikacja została dokonana w JSP, 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.
Poniższe kroki wyjaśniają cykl życia JSP:
- Tłumaczenie strony JSP
- Kompilacja strony JSP (Kompilacja strony JSP do _jsp.java)
- Ładowanie klas (_jsp.java jest konwertowany do pliku klasy _jsp.class)
- Tworzenie instancji (tworzony jest obiekt wygenerowanego serwletu)
- Inicjalizacja(
_jspinit()
metoda jest wywoływana przez kontener) - Przetworzenie żądania (
_jspservice()
metoda jest wywoływana przez kontener) - Zniszcz (
_jspDestroy()
metoda wywoływana przez kontener)
Przyjrzyjmy się bardziej szczegółowemu podsumowaniu powyższych punktów:
1) Tłumaczenie strony JSP:
A Java plik serwletu jest generowany z pliku źródłowego JSP. Jest to pierwszy etap cyklu życia JSP. W fazie tłumaczenia kontener sprawdza poprawność składniową stron JSP i plików znacznikó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 zostaną omówione w dalszej części) używane na tej stronie JSP.
- W powyższym obrazkowym opisie w pierwszym kroku plik demo.jsp jest tłumaczony na demo_jsp.java
- Weźmy przykład „demo.jsp”, jak pokazano poniżej:
Demo.jsp
<html> <head> <title>Demo JSP</title> </head> <% int demvar=0;%> <body> Count is: <% Out.println(demovar++); %> <body> </html>
Objaśnienie kodu dla Demo.jsp
Linia kodu 1: znacznik początkowy HTML
Linia kodu 2: Etykieta na głowę
Linia kodu 3 – 4: Tag tytułu, tj. Demo JSP i tag zamykający
Linia kodu 5 – 6: Znacznik skryptletu, w którym inicjuje się demo zmiennej
Linia kodu 7 – 8: W znaczniku treści tekst, który ma zostać wydrukowany na wyjściu (liczba to: )
Linia kodu 9: Znacznik skryptowy, w którym próbuje się wydrukować zmienną demovar ze zwiększoną wartością
Linia kodu 10 – 11: Treść i tagi HTML zostały zamknięte
W poniższym kodzie strona demonstracyjna JSP została przekonwertowana na serwlet demo_jsp.
Wyjaśnienie kodu dla Demo_jsp.java
Linia kodu 1: Klasa serwletu demo_jsp rozszerza klasę nadrzędną HttpServlet
Linia kodu 2 – 3: Zastąpienie metody usługi jsp, tj. _jspservice, której parametrami są obiekty HttpServletRequest i HttpServletResponse
Linia kodu 4: Metoda otwierania
Linia kodu 5: Wywołanie metody getWriter()
obiektu odpowiedzi, aby uzyskać PrintWriterobject (drukuje sformatowaną reprezentację obiektów do strumienia wyjściowego tekstu)
Linia kodu 6: Wywołanie metody setContentType obiektu odpowiedzi w celu ustawienia typu zawartości
Linia kodu 7: Za pomocą write()
metoda obiektu PrintWriter próbującego przeanalizować kod HTML
Linia kodu 8: Inicjowanie zmiennej demovar na 0
Linia kodu 9: Dzwonię write()
metoda obiektu PrintWriter do analizowania tekstu
Linia kodu 10: Dzwonię print()
metoda obiektu PrintWriter polegająca na zwiększaniu zmiennej demovar od 0+1=1. Zatem wynikiem będzie 1
Linia kodu 11: Za pomocą write()
metoda obiektu PrintWriter próbującego przeanalizować kod HTML
Wyjście:
- Tutaj możesz zobaczyć, że na zrzucie ekranu wartość wyjściowa 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 strona JSP, w której inicjowana jest i zwiększana jedna zmienna. Ta strona JSP jest konwertowana na serwlet (demo_jsp.class ), podczas którego silnik JSP ładuje stronę JSP i konwertuje ją na zawartość serwletu.
- Po konwersji cały tekst szablonu jest konwertowany na
println()
wypowiedzi i tyle 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 serwletu Java jest kompilowany do klasy serwletu Java
- Tłumaczenie strony źródłowej Java na jej klasę implementacji może nastąpić w dowolnym momencie pomiędzy wdrożeniem strony JSP w kontenerze a przetworzeniem strony JSP.
- W powyższym obrazkowym opisie demo_jsp.java jest skompilowany do pliku klasy demo_jsp.class
3) Ładowanie klas
- Klasa serwletu, która została załadowana ze źródła JSP, jest teraz ładowana do kontenera
4) Instancja
- W tym kroku generowany jest obiekt, czyli instancja klasy.
- Kontener zarządza jedną lub większą liczbą instancji 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ż zarówno kontener obsługuje JSP, jak i serwlet.
- Interfejs JSPPage udostępniany przez kontener
init()
idestroy()
Metody. - Istnieje interfejs HttpJSPPage, który obsługuje żądania HTTP i zawiera także metodę usługi.
5) Inicjalizacja
public void jspInit() { //initializing the code }
_jspinit()
metoda zainicjuje instancję serwletu, która została wygenerowana z JSP i zostanie wywołana przez kontener w tej fazie.- Po utworzeniu instancji metoda init zostanie wywołana natychmiast po tym
- Jest wywoływana tylko raz w cyklu życia strony 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 }
_jspservice()
metoda jest wywoływana przez kontener dla wszystkich żądań zgłaszanych przez stronę JSP w jej cyklu życia- W tej fazie musi przejść przez wszystkie powyższe fazy, a następnie można wywołać tylko metodę usługi.
- Przekazuje obiekty żądań i odpowiedzi
- Tej metody nie można zastąpić
- Metodę pokazano powyżej: Odpowiada za generowanie wszystkich metod HTTP tj. GET, POST itp.
7) Zniszcz
public void _jspdestroy() { //all clean up code }
_jspdestroy()
metoda jest również wywoływana przez kontener- Ta metoda jest wywoływana, gdy kontener zdecyduje, że nie potrzebuje już instancji serwletu do obsługi żądań.
- Kiedy zostanie wykonane wywołanie metodyzniszczenia, serwlet jest gotowy do wyczyszczenia pamięci
- To koniec cyklu życia.
- Możemy zastąpić
jspdestroy()
metoda, gdy wykonujemy jakiekolwiek czyszczenie, takie jak zwalnianie połączeń z bazą danych lub zamykanie otwartych plików.