2010-03-02 13 views
7

पर तैनाती के बाद केवल एक बार कहा जाता है, मैं Servlets के लिए नया हूं। मैं एक विधि का उपयोग करना चाहता हूं जिसे सर्वर पर तैनाती के बाद केवल एक बार बुलाया जाता है। मैंने HttpServlet#init() देखा। लेकिन मुझे लगा कि इसे प्रत्येक अनुरोध के साथ बुलाया जाता है। क्या मैंने इसे गलत समझा? init() के विकल्प क्या हैं?मैं एक विधि का उपयोग करना चाहता हूं जिसे सर्वर

उत्तर

20

नहीं, यह प्रत्येक अनुरोध में नहीं बुलाया जाता है। इसे केवल सर्वलेट के प्रारंभ के दौरान बुलाया जाता है जो आमतौर पर वेबपैप के जीवनकाल में केवल एक बार होता है। थोड़ा और विस्तार के लिए this answer भी देखें कि सर्वलेट कैसे बनाए जाते हैं और निष्पादित होते हैं।

यदि आप वास्तव में कुछ वैश्विक/एप्लिकेशनव्यापी प्रारंभिक करना चाहते हैं (जो इस प्रकार केवल विशेष सर्वलेट से बंधे नहीं हैं), तो आप आमतौर पर ServletContextListener का उपयोग करेंगे। आप contextInitialized() विधि में प्रारंभिक सामग्री कर सकते हैं।

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import javax.servlet.annotation.WebListener; 

@WebListener 
public class Config implements ServletContextListener { 
    public void contextInitialized(ServletContextEvent event) { 
     // Do stuff during webapp's startup. 
    } 
    public void contextDestroyed(ServletContextEvent event) { 
     // Do stuff during webapp's shutdown. 
    } 
} 

आप @WebListener एनोटेशन उपयोग नहीं कर सकते अभी तक Servlet 3.0 पर नहीं कर रहे हैं और अपग्रेड नहीं कर सकते, और इस प्रकार है, तो आप नीचे की तरह /WEB-INF/web.xml में यह रजिस्टर करने की आवश्यकता:

<listener> 
    <listener-class>com.example.Config</listener-class> 
</listener> 
+0

धन्यवाद, , तो संदर्भ प्रारंभ और init() के बीच मुख्य अंतर क्या है, पहले क्या चलाना चाहिए? – mebada

+1

'ServletContextListener # संदर्भ प्रारंभ() 'वेबपैड स्टार्टअप पर निष्पादित किया गया है। 'HttpServlet # init() 'servlet स्टार्टअप पर निष्पादित किया गया है। मुझे लगता है कि अब यह आपके लिए स्पष्ट होना चाहिए कि जब वेबपैप अभी तक शुरू नहीं हुआ है तो servlets को प्रारंभ/प्रारंभ नहीं किया जा सकता है। चित्र प्राप्त करने के लिए दूसरे उत्तर के लिंक को देखें। यदि आप वेबएप के स्टार्टअप पर हुक करना चाहते हैं तो आप आमतौर पर 'contextInitialized()' का उपयोग करते हैं। यदि आप सर्वलेट के स्टार्टअप पर हुक करना चाहते हैं तो आप आमतौर पर 'init()' का उपयोग करते हैं। यह वास्तव में सब कुछ है। यदि आपको यह भी पता नहीं है कि आपका कोड क्या करना है, तो मैं एक बार फिर से विचार करूँगा (या एक प्रश्न पूछें) – BalusC

+0

मैं प्रत्येक अनुरोध के साथ बाद में कॉन्फ़िगरेशन फ़ाइलों को लोड कर दूंगा। – mebada

1

init() केवल सर्वलेट के निर्माण पर ही बुलाया जाता है। यह सर्वर के जीवन के दौरान कई बार हो सकता है। आप सर्वलेट के नियमित उपयोग के लिए आवश्यक किसी भी चर या तर्क को प्रारंभ करने के लिए इसका उपयोग करते हैं।

संपादित करें: अपनी पोस्ट को फिर से पढ़ने के बाद, तकनीकी रूप से प्रत्येक अनुरोध के साथ नहीं कहा जाता है क्योंकि सर्वर प्रत्येक अनुरोध के लिए सर्वलेट का एक नया उदाहरण बना रहा है। अपनी सर्वर सेटिंग्स जांचें कि क्या यह सर्वर के जीवन के लिए एक एकल सर्वलेट रखने का एक नया सर्वलेट प्राप्त करेगा या नहीं।

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

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