Sobes.tech
Middle

Ինչպե՞ս տեղեկացնել օբյեկտին, որ սեսիան անվավեր է կամ ավարտվել է։

sobes.tech AI

Պատասխան AI-ից

Java վեբ հավելվածներում սեսիայի (Session Listeners) լսողները օգտագործվում են օբյեկտին HTTP-սեսիայի անվավերության կամ ավարտի մասին տեղեկացնելու համար, որոնք սահմանված են սերվլետ API-ի հատուկացմամբ:

Ինտերֆեյս javax.servlet.http.HttpSessionListener-ը իրականացնող դասերը ստանում են տեղեկություններ սեսիայի ստեղծման և ոչնչացման մասին:

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) {  
        // Սեսիայի ստեղծման ժամանակ տրամադրվող լոգիկա  
        HttpSession session = se.getSession();  
        System.out.println("Session created: " + session.getId());  
    }  

    @Override  
    public void sessionDestroyed(HttpSessionEvent se) {  
        // Սեսիայի ոչնչացման ժամանակ տրամադրվող լոգիկա  
        HttpSession session = se.getSession();  
        System.out.println("Session destroyed: " + session.getId());  

        // Այստեղ կարելի է ստանալ սեսիայի ատրիբուտները և տեղեկացնել օբյեկտներին  
        MySessionObject myObject = (MySessionObject) session.getAttribute("myObjectKey");  
        if (myObject != null) {  
            myObject.notifySessionInvalidated(); // Կոչել ձեր օբյեկտի մեթոդը  
        }  
    }  
}  

Օգտագործելու համար լսողին անհրաժեշտ է գրանցել այն դեսքրիպտորում (web.xml) կամ օգտագործել annotations (@WebListener):

Գրանցում web.xml-ում:

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

Գրանցում @WebListener-ով (սկսած Servlet 3.0-ից):

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

@WebListener  
public class MySessionListener implements HttpSessionListener {  
    // ... իրականացնել sessionCreated և sessionDestroyed մեթոդները
}

sessionDestroyed մեթոդի ներսում կարելի է ստանալ սեսիայում պահվող օբյեկտները (ատրիբուտները) և տեղեկացնել նրանց սեսիայի ավարտի մասին՝ կանչելով հատուկ մեթոդներ, եթե այդ օբյեկտները նախատեսված են այդպիսի տեղեկացումների համար:

Եթե օբյեկտը պետք է իմանա, երբ նրա սեսիան ավարտվում է, նա կարող է իրականացնել javax.servlet.http.HttpSessionBindingListener ինտերֆեյսը։ Այս օբյեկտները ստանում են տեղեկություններ, երբ ավելացվում կամ հեռացվում են սեսիայից:

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

public class MySessionBoundObject implements HttpSessionBindingListener {  

    @Override  
    public void valueBound(HttpSessionBindingEvent event) {  
        // Օբյեկտը ավելացվել է սեսիայում  
        System.out.println("Object bound to session: " + event.getSession().getId());  
    }  

    @Override  
    public void valueUnbound(HttpSessionBindingEvent event) {  
        // Օբյեկտը հեռացվել է սեսիայից կամ սեսիան ոչնչացվել է  
        System.out.println("Object unbound from session: " + event.getSession().getId());  

        // Այստեղ կարելի է իրականացնել տեղեկացման լոգիկա  
        notifySessionInvalidated(); // Օրինակ, կանչել ներքին մեթոդը  
    }  

    public void notifySessionInvalidated() {  
        System.out.println("MySessionBoundObject notified of session invalidation.");  
        // Ձեր սեսիայի ավարտի մշակման լոգիկան  
    }  
}  

Երբ MySessionBoundObject օբյեկտը ավելացվում է սեսիայում (session.setAttribute("myObjectKey", myObject)), կանչվում է valueBound-ը։ Երբ սեսիան ոչնչացվում է կամ օբյեկտը հեռացվում է սեսիայից (session.removeAttribute("myObjectKey")), կանչվում է valueUnbound-ը։ Այսպիսով, valueUnbound-ը կարող է ծառայել որպես տեղեկացում օբյեկտի համար նրա սեսիայի ավարտի մասին։