Obyektga sessiya yaroqsiz yoki tugaganligini qanday bildirish mumkin?
sobes.tech AI
AIdan javob
Java veb ilovalarida ob'ektni HTTP sessiyasining bekor qilinishi yoki tugashiga oid xabar berish uchun sessiya tinglovchilari (Session Listeners) ishlatiladi, ular servlet API spetsifikatsiyasi bilan belgilangan.
javax.servlet.http.HttpSessionListener interfeysini amalga oshirgan sinflar sessiyalarni yaratish va yo'q qilish haqida xabardor bo'lishadi.
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) {
// Sessiya yaratilganda bajariladigan logika
HttpSession session = se.getSession();
System.out.println("Sessiya yaratildi: " + session.getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// Sessiya tugatishda bajariladigan logika
HttpSession session = se.getSession();
System.out.println("Sessiya tugatildi: " + session.getId());
// Bu yerda sessiya atributlarini olish va ob'ektlarni xabardor qilish mumkin
MySessionObject myObject = (MySessionObject) session.getAttribute("myObjectKey");
if (myObject != null) {
myObject.notifySessionInvalidated(); // Ob'ektdagi metodni chaqirish
}
}
}
Tinglovchini ishlatish uchun, uni web.xml faylida yoki @WebListener annotatsiyasi yordamida ro'yxatdan o'tkazish kerak:
web.xmlda ro'yxatdan o'tkazish:
<web-app ...>
<listener>
<listener-class>com.example.MySessionListener</listener-class>
</listener>
</web-app>
@WebListener yordamida ro'yxatdan o'tkazish (Servlet 3.0 dan boshlab):
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MySessionListener implements HttpSessionListener {
// ... sessionCreated va sessionDestroyed metodlarini amalga oshirish
}
sessionDestroyed metodida, sessiyada saqlangan ob'ektlarga (atributlar) kirish va ularni sessiya tugaganidan so'ng xabardor qilish mumkin, bu ob'ektlarda bu holatni boshqaradigan maxsus metodni chaqirish orqali.
Agar ob'ekt o'zining sessiyasi tugashini bilishi kerak bo'lsa, u javax.servlet.http.HttpSessionBindingListener interfeysini amalga oshirishi mumkin. Bu ob'ektlar, sessiyaga qo'shilganda yoki undan olib tashlanganda, xabardor qilinadi.
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class MySessionBoundObject implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
// Ob'ekt sessiyaga qo'shilganda
System.out.println("Ob'ekt sessiyaga bog'landi: " + event.getSession().getId());
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// Ob'ekt sessiyadan chiqarilgan yoki sessiya tugatilgan
System.out.println("Ob'ekt sessiyadan chiqarildi: " + event.getSession().getId());
// Bu yerda, ob'ekt sessiya tugagach, xabardor qilish uchun logika
notifySessionInvalidated(); // Masalan, ichki metod chaqirish
}
public void notifySessionInvalidated() {
System.out.println("MySessionBoundObject, sessiya tugagani haqida xabardor qilindi.");
// Bu ob'ekt uchun sessiya tugashini boshqarish logikasi
}
}
MySessionBoundObject ob'ekti sessiyaga qo'shilganda (session.setAttribute("myObjectKey", myObject)), valueBound chaqiriladi. Sessiya tugaganda yoki ob'ekt sessiyadan olib tashlanganda (session.removeAttribute("myObjectKey")), valueUnbound chaqiriladi. Bu, valueUnbound ning ob'ektga, uning bog'langan sessiyasining tugashini bildirish uchun xizmat qilishi mumkin.