2013-05-25 6 views
8

यह साक्षात्कार प्रश्न मैं कुछ दिन पहले का सामना करना पड़ा में से एक है:क्या हम Servlet में नष्ट() विधि से सेवा() विधि को कॉल कर सकते हैं?

यह destroy() से service() विधि कॉल करना संभव है?

अग्रिम धन्यवाद।

उत्तर

22

destroy() एक जीवन चक्र विधि जब सर्वलेट का एक विशिष्ट उदाहरण उतारने सर्वलेट कंटेनर द्वारा कहा जाता है। इसी तरह, कंटेनर ग्राहक को अनुरोध करने पर क्लाइंट अनुरोध करते समय service() पर कॉल करेगा।

क्या हम service() विधि को destroy() से Servlet में विधि से कॉल कर सकते हैं?

लघु जवाब:हाँ, service() के रूप में किसी भी अन्य की तरह एक विधि है।

लंबा उत्तर: आप कर सकते हैं, लेकिन यह समझ में नहीं आता है। service() को एक अनुरोध और प्रतिक्रिया पैरामीटर की आवश्यकता होती है जो आमतौर पर कंटेनर द्वारा प्रदान की जाती है जब सर्वलेट कहा जाता है। यदि आप अपने आप से service() पर कॉल कर रहे हैं, तो आप उन पैरामीटर कैसे प्रदान कर रहे हैं? किस लिए? क्या आप दोनों पर null का उपयोग करेंगे? दो खाली पैरामीटर के लिए service() क्या अच्छा है?

क्या हम destroy() को service() विधि से Servlet में विधि से कॉल कर सकते हैं?

हाँ, फिर से, आप destroy()service() के भीतर से कॉल कर सकते हैं के रूप में यह किसी भी अन्य की तरह एक विधि है। हालांकि अभी भी अजीब है, यह कभी-कभी समझ में आता है, क्योंकि destroy() आपके द्वारा परिभाषित किए गए तर्क (सफाई, गुण हटाएं, आदि) करेगा।


महत्वपूर्ण: बस ध्यान में रखना है कि बस बुला destroy() होगा अनलोड सर्वलेट उदाहरण नहीं। आप प्रोग्राम में सर्वलेट्स के जीवन चक्र का प्रबंधन नहीं करते हैं, सर्वलेट कंटेनर करता है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। ये सचमुच अच्छा है। –

+0

ग्रेट उत्तर - एसीडीसीजियोर – MAA

2

destroy() का उद्देश्य सर्वलेट उदाहरण द्वारा उपयोग किए जाने वाले सभी संसाधनों को आवंटित/मुक्त करना है। destroy() कंटेनर डेग्रिस्टर सर्वलेट और इसकी सेवा को कॉल करके।

हाँ आप destroy() सेservice(request, response) anyohter विधि की तरह कॉल कर सकते हैं, लेकिन यह अभ्यस्त destroy() से सेवा विधि कॉल करने के रूप में उन सेवा विधि कभी नहीं कहा जा/निष्पादित जा रहा इसलिए इसकी बेकार निष्पादित किया, अनुरोध और प्रतिक्रिया के रूप में अशक्त हो जाएगा उन वस्तुओं को कंटेनर द्वारा प्रदान नहीं किया जाएगा।

public void destroy() { 
     try 
     { 
      doPost(null, null); // will not be executed 
      doGet(null, null); // will not be executed 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
Java doc से

:

सार्वजनिक शून्य को नष्ट()

सर्वलेट कंटेनर द्वारा कहा जाता है एक सर्वलेट कि सर्वलेट सेवा से बाहर ले जाया जा रहा है इंगित करने के लिए। इस विधि को केवल एक बार बुलाया जाता है जब सर्वलेट की सेवा विधि के भीतर सभी धागे निकलते हैं या टाइमआउट अवधि बीत चुके हैं।

सर्वलेट कंटेनर इस विधि को कॉल करने के बाद, यह इस सर्वलेट पर सेवा विधि को फिर से कॉल नहीं करेगा।

यह विधि सर्वलेट को आयोजित किए जाने वाले किसी भी संसाधन को साफ़ करने का अवसर प्रदान करती है (उदाहरण के लिए, मेमोरी, फ़ाइल हैंडल, धागे) और सुनिश्चित करें कि कोई भी सतत स्थिति स्मृति में सर्वलेट की वर्तमान स्थिति के साथ सिंक्रनाइज़ हो।

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