31 Ağustos 2020 Pazartesi

Event & Listener

Servlet veya uygulamayla ilgili durum değişikliklerini yakalamak ve bu değişiklikleri yönetmek için event ve listener'lar kullanılır. javax.servlet ve javax.servlet.http adreslerinden kullanılabilecek event ve listener'lar görüntülenebilir. Örnek 2 tanesi aşağıda inceleniyor.

ServletContextEvent & ServletContextListener

Uygulama deploy ve undeploy sırasında gerçekleştirilecek işlemler burada tanımlanır. Uygulama başlatılırken veritabanı bağlantısı, veritabanında tablo oluşturma gibi işlemler gerçekleştirilebilir. ServletContextListener bir interface'tir ve 2 tane metod içerir: contextDestroyed, contextInitialized. contextDestroyed server kapatılırken, contextInitialized server açılırken çalıştırılır. Her iki metod da ServletContextEvent tipinde bir event parametresi alır. Bu metodlar web container tarafından çağrılır ve bu event parametresini web container yollar ve sadece context bilgisini tutar, getServletContext() metodu ile context bilgisine erişilebilir. Daha detaylı bilgi için Tomcat dokümantasyonu incelenebilir. Web container'a oluşturulan listener sınıfı web.xml'den bildirilir.
Kullanımı:

web.xml

<listener>
    <listener-class>MyListener<listener-class>
</listener>

MyListener.java

public class MyListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent event) { ... }
    public void contextDestroyed(ServletContextEvent event) { ... } 
}

HttpSessionEvent & HttpSessionListener

Yeni bir session oluşturulurken ve silinirken otomatik yapılması istenen işlemler için bu listener kullanılır. Kullanıcı giriş yaptığı zaman aktif kullanıcı sayısını arttırmak, kullanıcı takibi için cookie oluşturmak vs işlemler burada yapılabilir. ServletContextListener'a benzer olarak HttpSessionListener da SessionCreated ve SessionDestroyed metodları içerir ve parametre olarak HttpSessionEvent alır. HttpSessionEvent sadece HttpSession bilgisini tutar. Bu bilgiye sessionEvent.getSession() ile ulaşılabilir. HttpSession id, oluşturma zamanı, harici bilgiler(setAttribute) vs bilgiler tutar. Web container tarafından yönetilir ve her bir yeni session oluşturulduğu zaman( burası önemli: servlet açıldığı zaman değil servlet içinde getSession() denildiği veya session oluşturulduğu zaman  ) veya session bittiği zaman( session bitmesi session.invalidate() komutu ile sağlanır, yani tarayıcıyı kapatmak yetmez, session timeout da gerçekleşebilir ) çağırılır. Kullanımı Servlet için olanın aynısı, sadece ServletContextListener yerine HttpSession Listener implement ediliyor.

Context attribute değişimi, servlet'a istek gelmesi vs durumlar için de ayrı listenerlar bulunuyor. Bunlara ilk başta verilen linklerle veya istenilen web sunucusunun dokümantasyonuna girerek öğrenilebilir.

0 yorum:

Yorum Gönderme