Sobes.tech
Middle

Obyekti necə xəbərdar etmək olar ki, sessiya etibarsızdır və ya başa çatıb?

sobes.tech Süni İntellekt

AI-dan cavab

Java veb tətbiqlərində HTTP sessiyasının etibarsızlaşdırılması və ya tamamlanması barədə obyekti məlumatlandırmaq üçün sessiya dinləyiciləri (Session Listeners), servlet API spesifikasiyası ilə müəyyən edilmişdir.

javax.servlet.http.HttpSessionListener interfeysini həyata keçirən siniflər sessiyanın yaradılması və məhvinə dair bildirişlər 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) {  
        // Sessiyanın yaradılması zamanı logika  
        HttpSession session = se.getSession();  
        System.out.println("Sessiya yaradıldı: " + session.getId());  
    }  

    @Override  
    public void sessionDestroyed(HttpSessionEvent se) {  
        // Sessiyanın məhvi zamanı logika  
        HttpSession session = se.getSession();  
        System.out.println("Sessiya məhv edildi: " + session.getId());  

        // Burada sessiya atributlarını əldə edə və obyektləri məlumatlandıra bilərsiniz  
        MySessionObject myObject = (MySessionObject) session.getAttribute("myObjectKey");  
        if (myObject != null) {  
            myObject.notifySessionInvalidated(); // Objektdəki metodu çağırırıq  
        }  
    }  
}  

Listener-i istifadə etmək üçün onu deployment descriptor-də (web.xml) qeydiyyatdan keçirmək və ya anotasiya (@WebListener) ilə qeyd etmək lazımdır:

web.xml-də qeydiyyat:

<web-app ...>  
    <listener>  
        <listener-class>com.example.MySessionListener</listener-class>  
    </listener>  
</web-app>  

@WebListener ilə qeydiyyat (Servlet 3.0-dan başlayaraq):

import javax.servlet.annotation.WebListener;  
import javax.servlet.http.HttpSessionEvent;  
import javax.servlet.http.HttpSessionListener;  

@WebListener  
public class MySessionListener implements HttpSessionListener {  
    // ... sessionCreated və sessionDestroyed metodlarının implementasiyası
}

sessionDestroyed metodunda sessiyada saxlanılan obyektlərə (atributlara) daxil olmaq və onların sessiyanın bitməsini bildirməsi üçün xüsusi metod çağırmaq mümkündür, əgər bu obyektlər bu cür bildirişləri emal etmək üçün dizayn olunublarsa.

Əgər obyekt özünün sessiyanın bitdiyini bilməlidirsə, javax.servlet.http.HttpSessionBindingListener interfeysini həyata keçirə bilər. Bu obyektlər əlavə olunduqda və ya sessiyadan silindikdə bildiriş alırlar.

import javax.servlet.http.HttpSessionBindingEvent;  
import javax.servlet.http.HttpSessionBindingListener;  

public class MySessionBoundObject implements HttpSessionBindingListener {  

    @Override  
    public void valueBound(HttpSessionBindingEvent event) {  
        // Obyekt sessiyaya əlavə olundu  
        System.out.println("Obyekt sessiyaya əlavə olundu: " + event.getSession().getId());  
    }  

    @Override  
    public void valueUnbound(HttpSessionBindingEvent event) {  
        // Obyekt sessiyadan çıxarıldı və ya sessiya məhv edildi  
        System.out.println("Obyekt sessiyadan çıxarıldı: " + event.getSession().getId());  

        // Burada obyektin sessiyanın bitməsini bildirməsi üçün loqika  
        notifySessionInvalidated(); // daxili metod çağırışı nümunəsi  
    }  

    public void notifySessionInvalidated() {  
        System.out.println("MySessionBoundObject sessiyanın bitməsindən xəbərdar edildi.");  
        // Bu obyekt üçün sessiyanın bitməsinə dair işləmə loqikası  
    }  
}  

MySessionBoundObject obyekt sessiyaya əlavə olunduqda (session.setAttribute("myObjectKey", myObject)), valueBound çağırılır. Sessiya məhv olunduqda və ya atribut silindikdə (session.removeAttribute("myObjectKey")), valueUnbound çağırılır. Beləliklə, valueUnbound obyektə onun əlaqəli sessiyasının bitdiyini bildirmək üçün istifadə oluna bilər.