पर तैनाती के बाद केवल एक बार कहा जाता है, मैं Servlets के लिए नया हूं। मैं एक विधि का उपयोग करना चाहता हूं जिसे सर्वर पर तैनाती के बाद केवल एक बार बुलाया जाता है। मैंने HttpServlet#init()
देखा। लेकिन मुझे लगा कि इसे प्रत्येक अनुरोध के साथ बुलाया जाता है। क्या मैंने इसे गलत समझा? init()
के विकल्प क्या हैं?मैं एक विधि का उपयोग करना चाहता हूं जिसे सर्वर
उत्तर
नहीं, यह प्रत्येक अनुरोध में नहीं बुलाया जाता है। इसे केवल सर्वलेट के प्रारंभ के दौरान बुलाया जाता है जो आमतौर पर वेबपैप के जीवनकाल में केवल एक बार होता है। थोड़ा और विस्तार के लिए 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>
init()
केवल सर्वलेट के निर्माण पर ही बुलाया जाता है। यह सर्वर के जीवन के दौरान कई बार हो सकता है। आप सर्वलेट के नियमित उपयोग के लिए आवश्यक किसी भी चर या तर्क को प्रारंभ करने के लिए इसका उपयोग करते हैं।
संपादित करें: अपनी पोस्ट को फिर से पढ़ने के बाद, तकनीकी रूप से प्रत्येक अनुरोध के साथ नहीं कहा जाता है क्योंकि सर्वर प्रत्येक अनुरोध के लिए सर्वलेट का एक नया उदाहरण बना रहा है। अपनी सर्वर सेटिंग्स जांचें कि क्या यह सर्वर के जीवन के लिए एक एकल सर्वलेट रखने का एक नया सर्वलेट प्राप्त करेगा या नहीं।
क्या आप ServletContextListener की तलाश में हैं?
- 1. मैं एक निजी विधि का परीक्षण करना चाहता हूं - क्या मेरे डिजाइन में कुछ गड़बड़ है?
- 2. मैं एक जीएई परियोजना के लिए मेवेन का उपयोग करना चाहता हूं, मैं कैसे करूँ?
- 3. क्या मैं हर बार Java SwingWorker का नया उदाहरण बनाना चाहता हूं जब मैं doInBackground() को आमंत्रित करना चाहता हूं?
- 4. मैं सिनात्रा (रूबी वेब ढांचे) में कोड कहां डालूं जिसे मैं सिर्फ एक बार निष्पादित करना चाहता हूं?
- 5. संरचना मानचित्र - मैं लालची कन्स्ट्रक्टर का उपयोग नहीं करना चाहता!
- 6. मैं देखना चाहता हूं कि एक स्ट्रिंग
- 7. मैं वेब ब्राउज़र में VI-like कमांड का उपयोग करना चाहता हूं?
- 8. मैं txt फ़ाइल कहां रखूं जिसे मैं जावा में पढ़ना चाहता हूं?
- 9. मैं प्रोजेक्ट निर्माण समय पर निर्दिष्ट एक आईडी प्रोजेक्ट को एक्सकोड में कैसे बना सकता हूं जिसे मैं उपयोग करना चाहता हूं?
- 10. मैं एक शाब्दिक स्ट्रिंग से कैसे बच सकता हूं जिसे मैं नियमित अभिव्यक्ति में जोड़ना चाहता हूं?
- 11. मैं NumPy/SciPy का उपयोग करना चाहता हूं। क्या मुझे पाइथन 2 या 3 का उपयोग करना चाहिए?
- 12. यदि आईई 6, मैं चेतावनी देना चाहता हूं और अन्य ब्राउज़र आइकन डाउनलोड करना चाहता हूं
- 13. सेलेनियम वेबड्रिवर विधि का उपयोग करना "browser.helperApps.neverAsk.saveToDisk" मैं एक लिंक
- 14. क्या मैं उन सभी को अपडेट करने के लिए डिप्लिकेट कुंजी का उपयोग करने का कोई तरीका है जिसे मैं सम्मिलित करना चाहता हूं?
- 15. एक एमक्यू क्या है और मैं इसका उपयोग क्यों करना चाहता हूं?
- 16. प्रिय डीबीए - मैं संग्रहीत प्रक्रियाओं के बजाय LinqToSQL का उपयोग करना चाहता हूं क्योंकि
- 17. मैं जानना चाहता हूं कि Win32.DLL
- 18. मैं छवियों के लिए एक अलग डोमेन बनाना चाहता हूं
- 19. क्या मैं वास्तव में न्यूनतम तारीख वापस करना चाहता हूं?
- 20. मैं बैकबोन में गुण कैसे पारित कर सकता हूं। मॉडल जिसे मैं गुणों के रूप में नहीं मानना चाहता हूं?
- 21. मैं स्ट्रिंग ऑब्जेक्ट के माध्यम से ऑब्जेक्ट हैशकोड विधि का आह्वान करना चाहता हूं। यह कैसे करना है?
- 22. मैं सरणी में इंडेक्स प्राप्त करना चाहता हूं जिसमें सी #
- 23. स्वयं का उपयोग करना * * विधि
- 24. मैं ब्राउज़र में एक पदानुक्रमित पेड़ खींचना चाहता हूं
- 25. मैं अपने grails ऐप में एक HTML पेज का उपयोग करना चाहता हूँ। लेकिन
- 26. मैं नहीं करना चाहता "रेक स्थापित" RubyGems
- 27. मैं रेल का उपयोग करके चैट रूम बनाना चाहता हूं, क्या मुझे juggernaut 2 या क्रैम्प का उपयोग करना चाहिए?
- 28. मैं सिनात्रा में कोड कहां डालूं कि ऐप बंद होने पर मैं निष्पादित करना चाहता हूं?
- 29. रेल और देवता का उपयोग करके, मैं साइन अप पर एक स्वागत ईमेल भेजना चाहता हूं।
- 30. एंड्रॉइड पर apktool है? मैं ".smali" इकट्ठा करना चाहता हूं और एंड्रॉइड एप्लिकेशन में नया ".apk" बनाना चाहता हूं
धन्यवाद, , तो संदर्भ प्रारंभ और init() के बीच मुख्य अंतर क्या है, पहले क्या चलाना चाहिए? – mebada
'ServletContextListener # संदर्भ प्रारंभ() 'वेबपैड स्टार्टअप पर निष्पादित किया गया है। 'HttpServlet # init() 'servlet स्टार्टअप पर निष्पादित किया गया है। मुझे लगता है कि अब यह आपके लिए स्पष्ट होना चाहिए कि जब वेबपैप अभी तक शुरू नहीं हुआ है तो servlets को प्रारंभ/प्रारंभ नहीं किया जा सकता है। चित्र प्राप्त करने के लिए दूसरे उत्तर के लिंक को देखें। यदि आप वेबएप के स्टार्टअप पर हुक करना चाहते हैं तो आप आमतौर पर 'contextInitialized()' का उपयोग करते हैं। यदि आप सर्वलेट के स्टार्टअप पर हुक करना चाहते हैं तो आप आमतौर पर 'init()' का उपयोग करते हैं। यह वास्तव में सब कुछ है। यदि आपको यह भी पता नहीं है कि आपका कोड क्या करना है, तो मैं एक बार फिर से विचार करूँगा (या एक प्रश्न पूछें) – BalusC
मैं प्रत्येक अनुरोध के साथ बाद में कॉन्फ़िगरेशन फ़ाइलों को लोड कर दूंगा। – mebada