JSP Yaşam Döngüsü: Aşamalar ve Şema Açıklaması

⚡ Akıllı Özet

JSP Yaşam Döngüsü, bir konteynerin bir sayfayı nasıl bir servlete dönüştürdüğünü, derlediğini, sınıfı yüklediğini, bir örnek oluşturduğunu, onu başlattığını, oluşturulan servis metodu aracılığıyla her isteğe hizmet verdiğini ve son olarak onu yok ettiğini açıklar.

  • 🔄 Yedi aşama: Çeviri, derleme, sınıf yükleme, örnek oluşturma, başlatma, istek işleme ve yok etme işlemleri bu sabit sırayla çalışır.
  • 📄 Çeviri: Konteyner sayfayı doğrular, ardından bir şey yazar. Java Kaynak dosya olduğundan, demo.jsp, herhangi bir işlem yürütülmeden önce demo_jsp.java haline gelir.
  • ⚙️ Derleme: Oluşturulan kaynak kod, Tomcat'in .java dosyasıyla birlikte çalışma dizininde sakladığı demo_jsp.class dosyasına derlenir.
  • ???? Üç yöntem: jspInit() sayfayı bir kez hazırlar, _jspService() her isteğe yanıt verir ve jspDestroy() kaynakları sonunda serbest bırakır.
  • ???? Bir kural: _jspService() fonksiyonu konteyner tarafından oluşturulur ve sayfa yazarı tarafından asla yazılmamalı veya geçersiz kılınmamalıdır.
  • 🗃️ Temizleme kancası: Veritabanı bağlantılarını ve açık dosyaları kapatmak için doğru yer jspDestroy() yöntemini geçersiz kılmaktır.

JSP Yaşam Döngüsü aşamaları: çeviriden yok olmaya kadar

JSP Yaşam Döngüsü Nedir?

JSP Yaşam Döngüsü Bir JSP sayfasının bir servlete dönüştürülmesi olarak tanımlanır, çünkü bir JSP sayfası hizmet isteklerini işleyebilmesi için önce bir servlete dönüştürülmelidir. Yaşam döngüsü, JSP'nin oluşturulmasıyla başlar ve ondan türetilen servlet örneğinin yok edilmesiyle sona erer.

Oluşturulan sınıf sıradan bir servlet olduğundan, servlet hakkında zaten bildiğiniz her şey geçerlidir.tracBu durum hala geçerli. Java Konteynerin yazdığı kod aslında çalışan koddur; JSP dosyası yalnızca sizin bakımını yaptığınız kaynak koddur.

JSP Yaşam Döngüsünün Farklı Aşamaları

Tarayıcı bir JSP dosyası istediğinde, JSP motoru öncelikle sayfanın derlenmesi gerekip gerekmediğini kontrol eder. Eğer JSP dosyası daha önce hiç derlenmemişse veya son derlemeden bu yana değiştirilmişse, JSP motoru sayfayı derler.

Bir JSP sayfasının derleme süreci üç adımdan oluşur:

  • JSP'nin ayrıştırılması
  • JSP'yi servlet'e dönüştürme
  • Servlet'in derlenmesi

JSP Yaşam Döngüsü Diyagramı

Aşağıdaki diyagramda JSP yaşam döngüsü gösterilmektedir. tracBu, kaynak dosyadan konteynerin çalıştırdığı sınıfa kadar tek bir sayfadır.

Çeviri, derleme, yükleme, örnekleme, başlatma, istek işleme ve yok etme işlemlerini gösteren JSP yaşam döngüsü diyagramı.

Aşağıdaki adımlar JSP'nin yaşam döngüsünü açıklamaktadır:

  1. JSP sayfasının çevirisi
  2. JSP sayfasının derlenmesi (JSP sayfasının _jsp.java dosyasına derlenmesi)
  3. Sınıf yükleme (_jsp.java dosyası _jsp.class sınıf dosyasına dönüştürülür)
  4. Örnek oluşturma (oluşturulan servlet'in bir nesnesi oluşturulur)
  5. Başlatma (jspInit() metodu konteyner tarafından çağrılır)
  6. İstek İşleme (_jspService() metodu kapsayıcı tarafından çağrılır)
  7. Yok et (jspDestroy() yöntemi kapsayıcı tarafından çağrılır)

JSP Yaşam Döngüsünün Aşamaları Açıklandı

Şimdi yukarıdaki maddelerin her birini daha detaylı inceleyelim.

1) JSP Sayfasının Çevirisi:

A Java Servlet dosyası, bir JSP kaynak dosyasından oluşturulur. Bu, JSP yaşam döngüsünün ilk adımıdır. Çeviri aşamasında, konteyner, JSP sayfasının ve etiket dosyalarının sözdizimsel doğruluğunu doğrular.

  • JSP kapsayıcısı, standart yönergeleri ve eylemleri ve etiket kitaplıklarına referans veren özel eylemleri yorumlar (bunların hepsi JSP sayfasının bir parçasıdır ve aşağıdaki bölümde ele alınmıştır). JSP öğeleri Bu JSP sayfasında kullanılan (eğitim amaçlı) metin.
  • Yukarıdaki görsel açıklamada, demo.jsp dosyası ilk adımda demo_jsp.java dosyasına dönüştürülmüştür.

Aşağıda gösterildiği gibi “demo.jsp” dosyasını örnek olarak ele alalım:

Demo.jsp

<html>
<head>
<title>Demo JSP</title>
</head>
<%
int demvar=0;%>
<body>
Count is:
<% Out.println(demovar++); %>
<body>
</html>

Yukarıdaki ilanla ilgili not: Aşağıda yer alan oluşturulmuş servlet ekran görüntüsüyle birebir eşleşecek şekilde, yayınlandığı haliyle aynen yeniden üretilmiştir. İçindeki iki yazım hatası, birebir kopyalanırsa derlenmeyecektir — değişken şu şekilde tanımlanmıştır: demvar ama basılı olarak demovarve örtük çıktı nesnesi şudur: out küçük harflerle değil OutSayfayı çalıştırmadan önce her ikisini de düzeltin.

Code Demo.jsp için açıklama

Code Satır 1: HTML başlangıç ​​etiketi

Code Satır 2: Başlık etiketi

Code 3-4. satırlar: Başlık etiketi (örneğin Demo JSP) ve kapanış head etiketi.

Code Satır 5-6: demo değişkeninin başlatıldığı Scriptlet etiketi.

Code 7-8. satırlar: `<body>` etiketinde, çıktıda yazdırılacak metin (Sayı: )

Code Satır 9: Değişken demovar'ı artırılmış değeriyle birlikte yazdırmaya çalıştığımız Scriptlet etiketi.

Code Satır 10 – 11: Body ve HTML etiketleri kapatıldı

Demo JSP sayfası, aşağıdaki kodda gösterilen demo_jsp servlet'ine dönüştürülür.

Çeviri sırasında demo.jsp dosyasından oluşturulan demo_jsp.java servlet kaynak kodu.

Code Demo_jsp.java için açıklama

Code Satır 1: Servlet sınıfı demo_jsp, üst sınıf HttpServlet'ten türetilmiştir.

Code Satır 2-3: JSP'nin servis yöntemini, yani _jspService'i geçersiz kılma; bu yöntem parametre olarak HttpServletRequest ve HttpServletResponse nesnelerini içerir.

Code Satır 4: Açılış yöntemi

Code Satır 5: get metodunu çağırmaWriterYanıt nesnesinin () çıktısını almak içinWriter Nesne (nesnelerin biçimlendirilmiş bir temsilini metin çıktı akışına yazdırır)

Code Satır 6: Yanıt nesnesinin setContentType yöntemini çağırarak içerik türünü ayarlama.

Code Satır 7: Print sınıfının write() yöntemini kullanmaWriter HTML'i ayrıştırmak için nesne

Code Satır 8: demovar değişkenini 0'a başlatma

Code Satır 9: Print sınıfının write() yöntemini çağırma.Writer metni ayrıştırmak için nesne

Code Satır 10: Print sınıfının print() yöntemini çağırmaWriter Nesne, demovar değişkenini 0 + 1 = 1'den artırarak değer elde etmeyi amaçlar. Dolayısıyla çıktı 1 olacaktır.

Code Satır 11: Print sınıfının write() yöntemini kullanmaWriter HTML'i ayrıştırmak için nesne

Çıktı:

Ardından tarayıcı, aşağıdaki ekran görüntüsünde görüldüğü gibi sayacı görüntüler.

demo.jsp'nin tarayıcı çıktısı (Count değeri: 1)

  • Ekran görüntüsünde çıktının 1 olduğunu görebilirsiniz, çünkü demvar 0'a başlatılmış ve ardından 0 + 1 = 1 olacak şekilde artırılmıştır.

Yukarıdaki örnekte,

  • demo.jsp, tek bir değişkenin başlatılıp artırıldığı bir JSP dosyasıdır. Bu JSP dosyası, JSP motorunun JSP sayfasını yükleyip servlet içeriğine dönüştürdüğü bir servlet'e (demo_jsp.class) dönüştürülür.
  • Dönüştürme işlemi gerçekleştiğinde, tüm şablon metni println() ifadelerine ve tüm JSP öğeleri de başka bir şekle dönüştürülür. Java kodu.

Basit bir JSP sayfasının servlet sınıfına çevrilmesi bu şekildedir.

2) JSP Sayfasının Derlenmesi

  • Oluşturulan Java Servlet dosyası derlenerek şu hale getirilir: Java sunucu uygulaması sınıfı
  • Çevirisi Java JSP sayfasının konteynere dağıtılması ile işlenmesi arasındaki herhangi bir zamanda, kaynak sayfanın uygulama sınıfına dönüştürülmesi işlemi gerçekleşebilir.
  • Yukarıdaki görsel açıklamada, demo_jsp.java dosyası demo_jsp.class adlı bir sınıf dosyasına derlenmektedir.
  • Apache Tomcat'te her iki yapıt da sunucu çalışma dizini altına yazılır. work/Catalina/localhost/<app>/org/apache/jspÇeviri hatasının teşhis edilmesi gerektiğinde bakılması gereken ilk yer burasıdır.

3) Sınıf yükleme

  • JSP kaynak kodundan oluşturulan servlet sınıfı artık konteynere yükleniyor.

4) Örnekleme

  • Bu adımda nesne, yani sınıfın örneği oluşturulur.
  • Konteyner, isteklere ve diğer olaylara yanıt olarak bu sınıfın bir veya daha fazla örneğini yönetir. Tipik olarak, bir JSP konteyneri bir servlet konteyneri kullanılarak oluşturulur. JSP konteyneri, bir servlet konteynerinin bir uzantısıdır, çünkü her iki konteyner de JSP ve servlet'leri destekler.
  • Konteyner tarafından sağlanan JspPage arayüzü, jspInit() ve jspDestroy() yöntemlerini tanımlar.
  • HTTP isteklerine hizmet eden bir HttpJspPage arayüzü vardır ve bu arayüz aynı zamanda servis yöntemini de içerir. İmza yapısı protokole bağlıdır, bu nedenle kapsayıcı, sayfa yazarından bunu bildirmesini istemek yerine bu yöntemi kendisi oluşturur.

5) Başlatma

public void jspInit()
{
	//initializing the code
}
  • jspInit() metodu, JSP'den oluşturulan servlet örneğini başlatır ve bu aşamada konteyner tarafından çağrılır.
  • Örnek oluşturulduktan hemen sonra init metodu çağrılır.
  • Bu yöntem, bir JSP yaşam döngüsü boyunca yalnızca bir kez çağrılır ve başlatma yöntemi yukarıda gösterildiği gibi tanımlanır.

6) Talep İşleme

void _jspservice(HttpServletRequest request HttpServletResponse response)
{
	//handling all request and responses
}
  • _jspService() metodu, JSP sayfasının yaşam döngüsü boyunca oluşturduğu tüm istekler için kapsayıcı tarafından çağrılır.
  • Bu aşama için sayfanın yukarıdaki tüm aşamalardan geçmesi gerekir ve ancak ondan sonra servis metodu çağrılabilir.
  • İstek ve yanıt nesnelerini iletir.
  • Bu yöntem geçersiz kılınamaz, çünkü kapsayıcı bunu çeviri sırasında yazar.
  • Yukarıda gösterilen yöntem, GET, POST ve diğerleri dahil olmak üzere tüm HTTP yöntemlerini işlemekten sorumludur.

7) Yok et

public void _jspdestroy()
{
            //all clean up code
}
  • jspDestroy() metodu da konteyner tarafından çağrılır.
  • Bu yöntem, konteynerin artık istekleri karşılamak için servlet örneğine ihtiyaç duymadığına karar verdiğinde çağrılır.
  • `destroy` metoduna çağrı yapıldıktan sonra, servlet çöp toplama işlemine hazır hale gelir.
  • Bu yaşam döngüsünün sonudur.
  • Veritabanı bağlantılarını serbest bırakmak veya açık dosyaları kapatmak gibi herhangi bir temizleme işlemi gerçekleştirirken jspDestroy() yöntemini geçersiz kılabiliriz.

Dikkate alınması gereken bir isimlendirme notu: Jakarta EE 9'dan itibaren bu tipler şu bölgelerde yaşıyor: jakarta.servlet.jsp paket yerine javax.servlet.jspDolayısıyla, bir uygulama mevcut bir sunucuya taşındığında eski içe aktarılan verilerin güncellenmesi gerekir.

SSS

Çeviriden sonra yaşam döngüleri aynıdır. Bir JSP, sayfanın bir servlet kaynak dosyasına ve sınıfına dönüştürülmesini sağlayan çeviri ve derleme olmak üzere iki aşama daha ekler. Sınıf yüklemesinden itibaren servlet çalışır.tract, değişmeden geçerlidir.

Sunucu çalışma dizini altında, work/Catalina/localhost/ /org/apache/jsp dizinine hem oluşturulan .java kaynak dosyası hem de derlenen .class dosyası buraya yerleşir, bu nedenle home.jsp dosyası home_jsp.java ve home_jsp.class haline gelir.

Konteyner, çeviri sırasında sayfa gövdesinden bunu oluşturur. İmzası istek protokolüne bağlıdır, bu nedenle spesifikasyon bunu JspPage arayüzünün dışında bırakır ve sayfa yazarlarının bunu kendilerinin bildirmesini yasaklar.

Oluşturulan servlet, ServletConfig'ini saklamak için zaten init() yöntemini uyguluyor ve ardından jspInit() yöntemini çağırıyor. Sayfa yazarları, konteyner kurulumunun asla atlanmaması için jspInit() yöntemini geçersiz kılıyor; bu da elle yazılmış bir init() geçersiz kılma işleminin riskini tam olarak oluşturuyor.

Ön derleme, her sayfayı ilk istekte değil, derleme veya dağıtım zamanında çevirir ve derler. İlk erişim gecikmesini ortadan kaldırır, yayınlanmadan önce çeviri hatalarını ortaya çıkarır ve sunucuda derleyici olmadan dağıtıma olanak tanır.

Jakarta Server Pages olarak desteklenmeye devam ediyor. Ana değişiklik paket ad alanında: Jakarta EE 9'dan itibaren API, javax.servlet.jsp'den jakarta.servlet.jsp'ye taşındı, bu nedenle eski içe aktarmaların mevcut bir sunucuda çalıştırılmadan önce yeniden yazılması gerekiyor.

Yapay zekâ asistanları oluşturulan _jsp.java yığın izini okuyor. trace ve bir derleme hatasını, hataya neden olan scriptlet satırına geri eşlerler; bu, çeviri hatalarının en zor kısmıdır. Ayrıca, bir etiket dosyasına veya bir servlete ait olan scriptlet'leri de işaretlerler.

Evet. Copilot, bir yorumdan scriptlet'ler, JSTL blokları, form işleme ve eşleşen servlet sınıfları oluşturur. RevJakarta paket ad alanı ve ifade dili olması gereken scriptlet'ler için çıktıyı inceleyin, çünkü öneriler genellikle eski eğitimleri takip eder.

Bu yazıyı şu şekilde özetleyin: