2013-10-27 9 views
16

में संदर्भों को समझना मैं वसंत के लिए नया हूं और मैं एक साधारण वेब एप्लिकेशन बना रहा हूं। मैं स्प्रिंग एमवीसी में संदर्भों के बारे में पढ़ रहा हूं।स्प्रिंग एमवीसी

मैं ग्रहण के लिए एसटीएस प्लगइन का उपयोग कर रहा हूं। मैंने प्लगइन का उपयोग कर स्प्रिंग एमवीसी प्रोजेक्ट बनाया है।

अब मेरे पास प्रोजेक्ट, web.xml, root-context.xml और servlet-context.xml में तीन xml दस्तावेज़ हैं। ये मेरे लिए एसटीएस द्वारा बनाए गए थे।

  1. web.xml में, डिस्पैचर सर्वलेट सर्वलेट-context.xml की ओर इशारा किया है और मैं समझता हूँ कि डिस्पैचर सर्वलेट्स काम एक वेब अनुप्रयोग के संदर्भ कैसे विचारों को हल करने के लिए जानता है और नियंत्रक सेम के लिए एक जगह है बनाने के लिए है मौजूद। क्या मेरी समझ सही है? यदि हां, तो इस संदर्भ से कौन सी नौकरी पूरी की जाती है?

  2. अब, रूट-context.xml नामक एक फ़ाइल है जिसमें मेरे प्रोजेक्ट डिफ़ॉल्ट पैकेज पर एक घटक स्कैन है। मेरी समझ यह है कि इस संदर्भ में वैश्विक बीन्स होने की आवश्यकता है जो कई servlets उपयोग कर सकते हैं। क्या मेरी समझ सही है? यह और क्या करता है? इस फ़ाइल का उपयोग करके किस तरह का संदर्भ बनाया गया है?

  3. अब, मैं प्रोजेक्ट के साथ आगे हूं और मेरे पास कई * -context.xml फ़ाइलें (दाओ-संदर्भ.एक्सएमएल, सुरक्षा-संदर्भ.एक्सएमएल आदि) हैं जो संदर्भ लोडर लिस्टनर (web.xml में) का उपयोग करके लोड की जाती हैं। यह एक अच्छा विचार है? या सब कुछ servlet-context.xml में जाना चाहिए? मुझे लगता है कि अलग-अलग संदर्भ होने का अच्छा विचार है क्योंकि यह चिंता का अलगाव प्रदान करता है। टिप्पणियाँ? साथ ही, इन * -context.xml फ़ाइलों से किस प्रकार का संदर्भ बनाया गया है? इन फ़ाइलों के लिए उचित फ़ोल्डर स्थान क्या है?

  4. वेब.एक्सएमएल टोमकैट आदि जैसे सर्वलेट कंटेनर के लिए है और परियोजना में अन्य सभी एक्सएमएल फाइल वसंत कंटेनर के लिए हैं। क्या वो सही है? इन सभी फ़ाइलों को चिंता का अलगाव प्रदान करने के लिए अलग कर दिया गया है?

  5. वर्तमान परिदृश्य में कितने एप्लिकेशन संदर्भ और वेब अनुप्रयोग संदर्भ मौजूद हैं?

किसी को भी एक से अधिक प्रेषक सर्वलेट की आवश्यकता क्यों होगी?

किसी को भी एक से अधिक एप्लिकेशन संदर्भ की आवश्यकता क्यों होगी?

विचार? टिप्पणियाँ? सुधार? सर्वोत्तम प्रथाएं?

उत्तर

12

इस डिजाइन के पीछे पूरा विचार एक विशिष्ट वेब अनुप्रयोग में विभिन्न वास्तुशिल्प परतों को संभालना है और संदर्भों में सेम के लिए विरासत/ओवरराइड तंत्र प्रदान करना है।वसंत में प्रत्येक प्रकार का संदर्भ विभिन्न वास्तुशिल्प परत से संबंधित है, उदाहरण के लिए, वेब परत, सेवा परत इत्यादि

एक वसंत आधारित वेब एप्लिकेशन में एकाधिक प्रेषक सर्वलेट कॉन्फ़िगर किया जा सकता है (हालांकि अधिकांश मामलों में इसका एक सर्वलेट - लेकिन प्रेषक serlvet एक सर्वलेट है फिर भी और web.xml में एकाधिक कॉन्फ़िगर किया जा सकता है)। इन्हें विभिन्न यूआरएल पैटर्न को संभालने के लिए कॉन्फ़िगर किया जा सकता है। तो जाहिर है कि प्रत्येक एक अलग सर्वलेट है और इसलिए विभिन्न वसंत वेब अनुप्रयोग संदर्भ हो सकता है। इनमें से प्रत्येक में स्प्रिंग वेब परत जैसे नियंत्रक, इंटरसेप्टर, रिज़ॉल्यूवर, लोकेल रिज़ॉल्यूशन इत्यादि के लिए अलग-अलग कॉन्फ़िगरेशन हो सकते हैं क्योंकि ये आमतौर पर किसी एप्लिकेशन की वेब परत से संबंधित होते हैं। ये सभी कॉन्फ़िगरेशन और सेम प्रत्येक प्रेषक सर्वलेट के लिए निजी हैं ताकि वे एक दूसरे के लिए दृश्यमान न हों। इसलिए एक अलग वसंत वेब अनुप्रयोग संदर्भ होने से इस गोपनीयता को सक्षम करने के लिए समझदारी होती है। हालांकि अन्य बीन्स हैं जिन्हें साझा करने के लिए डिज़ाइन किया गया है इसलिए रूट संदर्भ से संबंधित हैं। तो सभी साझा करने योग्य चीजें रूट संदर्भ से संबंधित हैं और इसे इस वेब एप्लिकेशन के लिए वैश्विक माना जा सकता है।

प्रत्येक प्रेषक सर्वलेट रूट संदर्भ में परिभाषित सभी बीन्स विरासत में मिलता है। हालांकि ध्यान देने योग्य महत्वपूर्ण बात यह है कि साझा बीन्स संबंधित डिस्पैचर सर्वलेट विशिष्ट सेम द्वारा ओवरराइड किया जा सकता है। तो वेब अनुप्रयोगों में रूट संदर्भ को विरासत में प्राप्त कुछ के रूप में देखा जा सकता है लेकिन इसे ओवरराइड किया जा सकता है।

+0

धन्यवाद। मुझे लगता है कि मुझे समझना शुरू हो रहा है। रूट अनुप्रयोग संदर्भ प्रत्येक एक्सएमएल फाइलों में परिभाषित संदर्भों से अलग (या उससे संबंधित) कैसे है? –

+0

वेब अनुप्रयोग में, रूट संदर्भ जो आमतौर पर ContextLoaderListener का उपयोग करके प्रारंभ किया जाता है, रूट संदर्भ को सर्वलेट संदर्भ (अनुप्रयोग स्कॉप्ड) वैरिएबल में WebApplicationContext.class.getName() + ".ROOT" नाम दिया गया है और इसलिए प्रत्येक प्रेषक सेरवेट (या उस मामले के लिए कोई भी कोड) आंतरिक रूप से इस विशेषता का उपयोग कर सकता है अगर उसके पास सर्वलेट संदर्भ – Shailendra

+0

तक पहुंच है! तो इन एक्सएमएल फाइलें, dao-context.xml service-context.xml अधिक संदर्भ बनाते हैं या सिर्फ संदर्भ लोडर लिस्टनर द्वारा बनाए गए मूल संदर्भ में जोड़ते हैं? इन एक्सएमएल फाइलों का दायरा क्या है? –

2

अच्छी वसंत आपको इस तरह से एक्सएमएल फाइलों के लिए मजबूर नहीं करती है, आप केवल एक एक्सएमएल फ़ाइल का उपयोग करके सबकुछ अच्छी तरह से काम कर सकते हैं जो servlet-context.xml होगा और केवल प्रेषक सर्वलेट का उपयोग करेगा। आम तौर पर आपकी सेवा सेम या दाओ सेम को परिभाषित करने के लिए अलग-अलग फाइलें होती हैं, इसलिए यह मूल रूप से आपके एप्लिकेशन डिज़ाइन पर निर्भर करता है, उदाहरण के लिए यदि आप वसंत सुरक्षा का उपयोग कर रहे हैं तो आप एक और XML फ़ाइल को जोड़ना चाहेंगे जैसे सुरक्षा-context.xml जैसा कि मैंने कहा था कि यह डिजाइन पर निर्भर करता है। आप वास्तव में संदर्भ लोडर श्रोता को पूरी तरह खत्म कर सकते हैं और अभी भी प्रेषक सर्वलेट का उपयोग करके सबकुछ करने में कामयाब रहे हैं। आपका प्रश्न गुंजाइश में बहुत व्यापक है, क्योंकि आप वसंत के लिए नए हैं, आपको वसंत कंटेनर के बारे में अधिक जानकारी मिलनी चाहिए और यह तय करना चाहिए कि आपकी आवश्यकता क्या है। मेरे पास आमतौर पर वेब-आईएनएफ में मेरी सर्वलेट-संदर्भ.एक्सएमएल है और क्लासपाथ में सेवा-context.xml जैसी अन्य कॉन्फ़िगरेशन है, फिर यह कोई सख्त नियम नहीं है कि यह मुझे कैसे उपयुक्त बनाता है।

+0

हाँ, मैं समझता हूं कि यह डिज़ाइन आधारित है। जब मैंने अपना आवेदन डिज़ाइन किया है, तो मैंने बनाया गया वास्तविक संदर्भों की शर्तों पर और अधिक समझने की कोशिश कर रहा था। उदाहरण के लिए, प्रेषक सर्वलेट एक वेब अनुप्रयोग संदर्भ बनाता है जहां आपकी वेब सामग्री का निवास होना चाहिए। संदर्भ लोडर श्रोता एक अनुप्रयोग संदर्भ बनाता है। इन दोनों एक साथ कैसे काम करते हैं? क्या वहां केवल एक एप्लिकेशन संदर्भ है जिसमें उन सभी सेम एक्सएमएल फाइलों से हैं या प्रत्येक एक्सएमएल फाइल के लिए एक एप्लीकेशन संदर्भ बनाया गया है? –

+0

ने प्रश्न को भी संपादित किया है –

+0

बनाए गए संदर्भों की संख्या फाइलों की संख्या पर निर्भर नहीं है। डिस्पैचर सर्वलेट बाल संदर्भ के रूप में बनाया गया है। – varun