Nesneye oturumun geçersiz veya sona erdiğini nasıl bildirilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java web uygulamalarında bir nesneye HTTP oturumunun geçersiz kılınması veya sona erdirilmesi hakkında bildirimde bulunmak için, Servlet API spesifikasyonu tarafından tanımlanan oturum dinleyicileri (Session Listeners) kullanılır.
javax.servlet.http.HttpSessionListener arayüzünü uygulayan sınıflar, oturumların oluşturulması ve yok edilmesi hakkında bildirim alır.
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSession;
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// Oturum oluşturulurken yapılacak işlemler
HttpSession session = se.getSession();
System.out.println("Oturum oluşturuldu: " + session.getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// Oturum yok edilirken yapılacak işlemler
HttpSession session = se.getSession();
System.out.println("Oturum yok edildi: " + session.getId());
// Oturumdaki attribute'lara erişip nesneleri bilgilendirebilirsiniz
MySessionObject myObject = (MySessionObject) session.getAttribute("myObjectKey");
if (myObject != null) {
myObject.notifySessionInvalidated(); // Nesnede method çağrısı
}
}
}
Dinleyiciyi kullanmak için, web.xml dosyasında veya @WebListener anotasyonu ile kaydetmek gerekir:
web.xml'e kayıt:
<web-app ...>
<listener>
<listener-class>com.example.MySessionListener</listener-class>
</listener>
</web-app>
@WebListener ile kayıt (Servlet 3.0 ve sonrası):
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MySessionListener implements HttpSessionListener {
// ... sessionCreated ve sessionDestroyed metodlarının implementasyonu
}
sessionDestroyed metodunun içinde, oturumda saklanan nesnelere (attribute'lar) erişebilir ve oturum sona erdiğinde bunları bilgilendirebilirsiniz, bu nesnelerde bu durumu ele alan özel bir metod çağırarak.
Bir nesne, oturumunun sona erdiğini bilmek istiyorsa, javax.servlet.http.HttpSessionBindingListener arayüzünü uygulayabilir. Bu nesneler, oturuma eklenip çıkarıldıklarında bildirim alır.
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class MySessionBoundObject implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
// Nesne oturuma eklendiğinde
System.out.println("Nesne oturuma bağlandı: " + event.getSession().getId());
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// Nesne oturumdan çıkarıldığında veya oturum yok edildiğinde
System.out.println("Nesne oturumdan çıkarıldı: " + event.getSession().getId());
// Burada, nesne oturumunun sona erdiğini bildiren mantık eklenebilir
notifySessionInvalidated(); // Örneğin, iç metod çağrısı
}
public void notifySessionInvalidated() {
System.out.println("MySessionBoundObject, oturumun sona erdiğini bildirdi.");
// Bu nesne için oturum sonlandırma işlemini burada yapabilirsiniz
}
}
MySessionBoundObject nesnesi, oturuma eklendiğinde (session.setAttribute("myObjectKey", myObject)), valueBound çağrılır. Oturum yok edildiğinde veya nesne oturumdan kaldırıldığında (session.removeAttribute("myObjectKey")), valueUnbound çağrılır. Bu sayede, valueUnbound, nesneye oturumunun sona erdiğini bildiren bir bildirim işlevi görebilir.