2012-07-12 12 views
5

स्पष्ट रूप से किसी बिंदु पर एक वस्तु बनाई जाती है और नष्ट हो जाती है/पूल में लौटा दी जाती है। मुझे विशेष रूप से दिलचस्पी है कि ये कचरे से कैसे एकत्र किए जाते हैं। क्या इस व्यवहार को नियंत्रित करने का कोई तरीका है? विशेष रूप से, क्या invalidate() पर कॉल करने के लिए इन ऑब्जेक्ट्स को संग्रहित किया जाएगा? जब वे उनमें संग्रहीत कोई संदर्भ जारी करते हैं?जावा HttpSession ऑब्जेक्ट का जीवन चक्र क्या है?

अधिक जानकारी बेहतर है।

उत्तर

8

HttpSession मूल रूप से स्ट्रिंग कुंजी से कुछ मनमाना मूल्य के लिए एक नक्शा है। हर बार जब आप सत्र बनाते हैं (जेएसपी तक पहुंचकर या getSession()/getSession(true) पर कॉल करके), कंटेनर अद्वितीय स्ट्रिंग सत्र आईडी उत्पन्न करेगा और उस HttpSession ऑब्जेक्ट का संदर्भ रखेगा। फिर, यह सत्र आईडी से HttpSession ऑब्जेक्ट का मानचित्र उपयोग करेगा।

एक बार जब आप सत्र में कुछ डाल देते हैं, तो कंटेनर उस सत्र का संदर्भ रखता है और सत्र में आपके ऑब्जेक्ट का संदर्भ होता है। यह कुछ समय के लिए वहां रहेगा। तीन स्थिति है जब आपके आइटम सत्र से निकाल दिया जाएगा रहे हैं:

  1. आप स्पष्ट रूप से यह (removeAttribute() या setAttribute(null)) को हटाने जब

  2. जब आप invalidate() पूरे सत्र। यह मूल रूप से सभी विशेषताओं को हटा देता है और पूरे सत्र को कंटेनर-प्रबंधित सत्र मानचित्र से हटा देता है

  3. जब सत्र समाप्त हो जाता है (2 के साथ समान व्यवहार) ऐसा तब होता है जब कोई सर्वलेट/जेएसपी कॉन्फ़िगर करने योग्य समय में सत्र का उपयोग नहीं करता है (उदाहरण के लिए 10 मिनट)

पल एक वस्तु सत्र से निकाल दिया जाता है (ऊपर अंक) और कोई अन्य कोड के किसी भी है कि वस्तु के लिए एक संदर्भ रखती है, यह कचरा संग्रहण के लिए पात्र है और अगले जीसी चलाने के दौरान हटा दिया जाएगा ।


आप एक वस्तु है कि एक HttpSession को HttpSessionBindingListener लागू करता व्यवहार ऊपर वर्णित के कुछ निरीक्षण करने के लिए जोड़ सकते हैं। एक ऑब्जेक्ट जो इस इंटरफ़ेस को लागू करता है, उदाहरण के लिए, सत्र से अनबाउंड होने पर लॉग संदेश प्रिंट कर सकता है।

आप documentation here देख सकते हैं।

1

मुझे लगता है कि यह आपके द्वारा उपयोग किए जाने वाले कंटेनर पर निर्भर करता है, कार्यान्वयन का सवाल।

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