spring - स्प्रिंग एमवीसी में एप्लीकेशनकॉन्टेक्स्ट और वेब एप्लिकेशंस कॉन्टेक्स्ट के बीच क्या अंतर है?




spring-mvc applicationcontext (3)

संभावित डुप्लिकेट:
वसंत में applicationContext और spring-servlet.xml के बीच अंतर

एप्लिकेशन संदर्भ और वेब अनुप्रयोग संदर्भ के बीच क्या अंतर है?

मुझे पता है कि WebApplicationContext स्प्रिंग एमवीसी आर्किटेक्चर उन्मुख अनुप्रयोगों के लिए उपयोग किया जाता है?

मैं जानना चाहता हूं कि एमवीसी अनुप्रयोगों में ApplicationContext का उपयोग क्या है? और ApplicationContext में किस तरह के सेम परिभाषित किए गए हैं?


वेब अनुप्रयोग संदर्भ विस्तारित अनुप्रयोग संदर्भ जो मानक javax.servlet.ServletContext साथ काम करने के लिए डिज़ाइन किया गया है, इसलिए यह कंटेनर के साथ संवाद करने में सक्षम है।

public interface WebApplicationContext extends ApplicationContext {
    ServletContext getServletContext();
}

WebApplicationContext में तत्काल बीन्स, ServletContextAware इंटरफ़ेस को लागू करने पर ServletContext का उपयोग करने में सक्षम होंगे

package org.springframework.web.context;
public interface ServletContextAware extends Aware { 
     void setServletContext(ServletContext servletContext);
}

ServletContext उदाहरण के साथ कई चीजें संभव हैं, उदाहरण के लिए getResourceAsStream () विधि को कॉल करके WEB-INF संसाधन (xml configs और आदि) तक पहुंच। आम तौर पर वेब अनुप्रयोग में वेब.एक्सएमएल में परिभाषित सभी अनुप्रयोग संदर्भ स्प्रिंग एप्लिकेशन वेब अनुप्रयोग संदर्भ हैं, यह रूट वेबैप संदर्भ और सर्वलेट के ऐप संदर्भ दोनों में जाता है।

साथ ही, वेब अनुप्रयोग संदर्भ क्षमताओं के आधार पर आपके एप्लिकेशन को परीक्षण करने में थोड़ा कठिन बना दिया जा सकता है, और आपको परीक्षण के लिए MockServletContext क्लास का उपयोग करने की आवश्यकता हो सकती है।

सर्वलेट और रूट संदर्भ के बीच अंतर वसंत आपको बहुस्तरीय अनुप्रयोग संदर्भ पदानुक्रमों का निर्माण करने की अनुमति देता है, इसलिए आवश्यक बीन मूल संदर्भ से प्राप्त किया जाएगा यदि यह वर्तमान अनुप्रयोग संदर्भ में मौजूद नहीं है। डिफ़ॉल्ट रूप से वेब ऐप्स में दो पदानुक्रम स्तर, रूट और सर्वलेट संदर्भ होते हैं: ।

यह आपको पूरे अनुप्रयोगों के लिए सिंगलटन (स्प्रिंग सिक्योरिटी बीन्स और मूल डेटाबेस एक्सेस सेवाएं आम तौर पर यहां रहते हैं) के रूप में कुछ सेवाएं चलाने की अनुमति देता है और दूसरा बीन्स के बीच नाम संघर्ष से बचने के लिए संबंधित सर्लेट में अलग-अलग सेवाओं के रूप में। उदाहरण के लिए एक सर्वलेट संदर्भ वेब पृष्ठों की सेवा करेगा और दूसरा एक स्टेटलेस वेब सेवा लागू करेगा।

जब आप वसंत सर्वलेट कक्षाओं का उपयोग करते हैं तो यह दो स्तर अलगाव बॉक्स से बाहर आता है: रूट अनुप्रयोग संदर्भ को कॉन्फ़िगर करने के लिए आपको अपने वेब.एक्सएमएल में संदर्भ- param टैग का उपयोग करना चाहिए

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/root-context.xml
            /WEB-INF/applicationContext-security.xml
    </param-value>
</context-param>

(रूट अनुप्रयोग संदर्भ ContextLoaderListener द्वारा बनाया गया है जिसे web.xml में घोषित किया गया है

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 

) और सर्वलेट अनुप्रयोग संदर्भों के लिए सर्वलेट टैग

<servlet>
   <servlet-name>myservlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>app-servlet.xml</param-value>
   </init-param>
</servlet>

कृपया ध्यान दें कि यदि init-param छोड़ा जाएगा, तो वसंत इस उदाहरण में myservlet-servlet.xml का उपयोग करेगा।

यह भी देखें: स्प्रिंग फ्रेमवर्क में applicationContext.xml और spring-servlet.xml के बीच अंतर


सर्वलेट दिनों पर वापस जाकर, web.xml में केवल एक <context-param> , इसलिए जब सर्वर किसी एप्लिकेशन को लोड करता है और उस संदर्भ में डेटा सभी संसाधनों (पूर्व: Servlets और JSPs) के बीच साझा किया जाता है तो केवल एक संदर्भ वस्तु उत्पन्न होती है। यह संदर्भ में डेटाबेस ड्राइवर नाम के समान है, जो नहीं बदलेगा। इसी तरह, जब हम <contex-param> वसंत में संदर्भ कॉन्फिग लोकेशन पैराम घोषित करते हैं तो वसंत एक एप्लिकेशन संदर्भ वस्तु बनाता है।

 <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>com.myApp.ApplicationContext</param-value>
 </context-param>

आप एक आवेदन में एकाधिक Servlets हो सकता है। उदाहरण के लिए आप किसी भी तरह से / सुरक्षित / * अनुरोधों को / और गैर-seucre / * को अन्य तरीकों से संभालना चाहते हैं। इन प्रत्येक Servlets के लिए आप एक संदर्भ वस्तु हो सकती है, जो एक WebAplicationContext है।

<servlet>
    <servlet-name>SecureSpringDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>com.myapp.secure.SecureContext</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>SecureSpringDispatcher</servlet-name>
    <url-pattern>/secure/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>NonSecureSpringDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>com.myapp.non-secure.NonSecureContext</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>NonSecureSpringDispatcher</servlet-name>
    <url-pattern>/non-secure/*</url-patten>
</servlet-mapping>

ApplicationContext applicationContext.xml प्रत्येक वेब एप्लिकेशन के लिए रूट संदर्भ कॉन्फ़िगरेशन है। स्प्रिंग लोड करता है applicationContext.xml फ़ाइल और पूरे एप्लिकेशन के लिए ApplicationContext बनाता है। प्रति वेब एप्लिकेशन में केवल एक आवेदन संदर्भ होगा। यदि आप संदर्भ कॉन्फ़िगर स्थान पैरामीटर का उपयोग कर वेब.एक्सएमएल में संदर्भ कॉन्फ़िगरेशन फ़ाइल नाम स्पष्ट रूप से घोषित नहीं कर रहे हैं, तो स्प्रिंग WEB-INF फ़ोल्डर के तहत applicationContext.xml की खोज करेगा और फ़ाइल फ़ाइल नहीं मिला अगर यह फ़ाइल नहीं मिल सका।

WebAplicationContext एप्लिकेशनकॉन्टेक्स्ट के अलावा, एक ही वेब एप्लिकेशन में एकाधिक WebAplicationContext हो सकता है। सरल शब्दों में, एकल WebPplicationContext से जुड़े प्रत्येक डिस्पैचर सर्वलेट। xxx-servlet.xml फ़ाइल DispatcherServlet के लिए विशिष्ट है और वेब अनुप्रयोग में अनुरोधों को संभालने के लिए कॉन्फ़िगर किए गए एक से अधिक डिस्पैचर सर्वर को कॉन्फ़िगर किया जा सकता है। ऐसे दृश्यों में, प्रत्येक डिस्पैचर सर्वलेट में एक अलग xxx-servlet.xml कॉन्फ़िगर किया जाएगा। लेकिन, applicationContext.xml सभी सर्वलेट कॉन्फ़िगरेशन फ़ाइलों के लिए आम होगा। स्प्रिंग डिफ़ॉल्ट वेब फ़ाइल "xxx-servlet.xml" नाम से आपके वेबएप वेब-आईएनएफ फ़ोल्डर से होगा जहां xxx वेब.एक्सएमएल में सर्वलेट नाम है। यदि आप उस फ़ाइल नाम का नाम बदलना चाहते हैं या स्थान बदलना चाहते हैं, तो संदर्भ के रूप में कॉन्फिग्लोकेशन के साथ प्रारंभ-param जोड़ें।







applicationcontext