2013-07-21 4 views
31

मैं पहले जेएसपी और सर्वलेट के माध्यम से पढ़ रहा हूं। विभिन्न प्रकार के श्रोताओं के माध्यम से जाकर, मैं HttpSessionBindingListener और HttpSessionAttributeListener पर आया।HttpSessionBindingListener और HttpSessionAttributeListener का व्यावहारिक उपयोग

मैं दोनों के बीच के अंतर के बारे में सोच रहा था - मैं उन दो श्रोताओं के असली दुनिया के उदाहरणों में व्यावहारिक उपयोग देखना चाहता हूं। मैंने HttpSessionBindingListener का परीक्षण valueBound() और valueUnBound() को कार्यान्वित करके किया - एक वस्तु को यह जानने की आवश्यकता क्यों है कि इसे जोड़ा गया है या नहीं?

मैं व्यावहारिक उपयोगों के बारे में बहुत उलझन में हूं। कृपया इसे स्पष्ट करने में मदद करें।

उत्तर

41

HttpSessionBindingListener कक्षा पर लागू किया जाना है जिसका उदाहरण सत्र में संग्रहीत किया जा सकता है, जैसे लॉग-इन उपयोगकर्ता।

उदा।

public class ActiveUser implements HttpSessionBindingListener { 

    @Override 
    public void valueBound(HttpSessionBindingEvent event) { 
     logins.add(this); 
    } 

    @Override 
    public void valueUnbound(HttpSessionBindingEvent event) { 
     logins.remove(this); 
    } 

} 

इस ActiveUser का एक उदाहरण HttpSession#setAttribute() द्वारा एक सत्र विशेषता के रूप में तैयार हो जाओ, तो valueBound() सक्रिय किया जाएगा। जब इसे HttpSession#removeAttribute() या सत्र के अमान्यता से हटा दिया जाता है, या किसी अन्य HttpSession#setAttribute() द्वारा प्रतिस्थापित किया जाता है, तो valueUnbound() लागू किया जाएगा।

:

यहाँ कुछ असली दुनिया उपयोग के मामलों रहे हैंको एक आवेदन विस्तृत @WebListener के रूप में कार्यान्वित किया जाना है जो पर विशेषता को जोड़ा, निकाला या HttpSession में प्रतिस्थापित किया गया है। उपर्युक्त ActiveUser उदाहरण के साथ जारी रखना, यह विशेष रूप से उपयोगी है यदि आप 32 को लागू करने के लिए ActiveUser कक्षा को संशोधित नहीं कर सकते हैं (क्योंकि यह तृतीय पक्ष या तो है), या जब आप मनमाना राशि पर "मार्कर इंटरफ़ेस" का उपयोग करना चाहते हैं कक्षाएं ताकि आप एक केंद्रीय स्थान पर सुनवाई नौकरी कर सकें।

+0

धन्यवाद इतना @BalusC:

@WebListener public class ActiveUserListener implements HttpSessionAttributeListener { @Override public void attributeAdded(HttpSessionBindingEvent event) { if (event.getValue() instanceof ActiveUser) { logins.add(event.getValue()); } } @Override public void attributeRemoved(HttpSessionBindingEvent event) { if (event.getValue() instanceof ActiveUser) { logins.remove(event.getValue()); } } @Override public void attributeReplaced(HttpSessionBindingEvent event) { if (event.getValue() instanceof ActiveUser) { logins.add(event.getValue()); } } } 

यहाँ एक वास्तविक दुनिया उपयोग के मामले में है। मैं अंतर समझ गया। विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद। – benz

+0

यह एक अच्छा जवाब है। @ बाल्लूसी आप इस तरह की अच्छी जानकारी में इस जानकारी को प्राप्त करने और पेश करने के लिए कैसे प्रबंधन करते हैं। – Makky

+0

आपका स्वागत है। – BalusC

संबंधित मुद्दे