init-param और संदर्भ-परम


88

बीच क्या अंतर है <init-param>और <context-param>?


@RC। यह सवाल नहीं-जहाँ उन दो पारमों के बीच के अंतर पर चर्चा करता है .. यह सिर्फ दो संदर्भों में लोड गुणों के बारे में है ..
रोहित जैन

मैं शीर्षक पर रुक गया, मेरा बुरा।

जवाबों:


120

<init-param>और <context-param>स्थिर पैरामीटर हैं जो web.xml फ़ाइल में संग्रहीत हैं। यदि आपके पास कोई डेटा है जो बार-बार नहीं बदलता है तो आप इसे उनमें से किसी एक में संग्रहीत कर सकते हैं।

यदि आप विशेष डेटा को स्टोर करना चाहते हैं जो किसी विशेष सर्वलेट स्कोप तक ही सीमित है , तो आप इसका उपयोग कर सकते हैं <init-param>। आपके द्वारा घोषित किया गया <init-param>कुछ भी केवल उस विशेष सर्वलेट के लिए ही सुलभ है। init-param को <servlet>टैग के अंदर घोषित किया गया है ।

<servlet>
     <display-name>HelloWorldServlet</display-name>
     <servlet-name>HelloWorldServlet</servlet-name>
     <init-param>
         <param-name>Greetings</param-name>
         <param-value>Hello</param-value>
     </init-param>
</servlet>

और आप सर्वलेट में उन मापदंडों को एक्सेस कर सकते हैं:

out.println(getInitParameter("Greetings"));

यदि आप डेटा को स्टोर करना चाहते हैं जो पूरे एप्लिकेशन के लिए सामान्य है और यदि यह बार-बार नहीं बदलता है, तो आप एप्लिकेशन संदर्भ <context-param>की servletContext.setAttribute()विधि के बजाय उपयोग कर सकते हैं । <context-param>वीएस के उपयोग के संबंध में अधिक जानकारी के लिए ServletContext.setAttribute()इस प्रश्न पर एक नज़र डालें । संदर्भ-परम टैग के तहत घोषित किए जाते हैं web-app। आप <context-param>निम्नानुसार घोषित और उपयोग कर सकते हैं

<web-app>
    <context-param>
        <param-name>Country</param-name>
        <param-value>India</param-value>
    </context-param>
    <context-param>
        <param-name>Age</param-name>
        <param-value>24</param-value>
    </context-param>
</web-app>

अनुप्रयोग में या तो JSP या सर्वलेट में उपयोग

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");

1
संदर्भ-पैरामीटर को प्रोग्रामेटिक रूप से कैसे सेट करें?
गौरव

2
@ गौरव दिलचस्प है, मैं इसके लिए एक विधि पा सकता हूं <init-param>: ServletContext::setInitParameter(String name, String value)लेकिन एक संदर्भ पैरामीटर सेट करने के लिए नहीं <context-param>
बेसिल बॉर्क

8

वेब.xml में नीचे दी गई परिभाषा पर विचार करें

<servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>TestServlet</servlet-class>
    <init-param>
        <param-name>myprop</param-name>
        <param-value>value</param-value>
    </init-param>
</servlet>

आप देख सकते हैं कि init-param को सर्वलेट तत्व के अंदर परिभाषित किया गया है। इसका मतलब है कि यह केवल घोषणा के तहत सर्वलेट के लिए उपलब्ध है और वेब एप्लिकेशन के अन्य भागों में नहीं। यदि आप चाहते हैं कि यह पैरामीटर अनुप्रयोग के अन्य भागों के लिए उपलब्ध हो, तो एक JSP का कहना है कि यह स्पष्ट रूप से JSP को पास किया जाना चाहिए। उदाहरण के लिए request.setAttribute () के रूप में पारित किया गया। यह अत्यधिक अक्षम और कोड के लिए मुश्किल है।

इसलिए यदि आप उन मूल्यों को स्पष्ट रूप से पारित किए बिना आवेदन के भीतर कहीं से भी वैश्विक मूल्यों तक पहुंच प्राप्त करना चाहते हैं, तो आपको कॉन्टेक्ट इनिट मापदंडों का उपयोग करने की आवश्यकता है।

Web.xml में निम्नलिखित परिभाषा पर विचार करें

 <web-app>
      <context-param>
           <param-name>myprop</param-name>
           <param-value>value</param-value>
      </context-param>
 </web-app>

यह संदर्भ परम वेब अनुप्रयोग के सभी भागों के लिए उपलब्ध है और इसे संदर्भ ऑब्जेक्ट से पुनर्प्राप्त किया जा सकता है। उदाहरण के लिए, getServletContext ()। GetInitParameter ("dbname");

एक JSP से आप अनुप्रयोग निहित वस्तु का उपयोग करके संदर्भ पैरामीटर तक पहुँच सकते हैं। उदाहरण के लिए, application.getAttribute ("dbname");


6
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

मैंने अपने PersistenceContext.xmlभीतर इनिशियलाइज़ किया है <context-param>क्योंकि मेरे सभी सर्वलेट्स MVC फ्रेमवर्क में डेटाबेस के साथ इंटरैक्ट करेंगे।

Howerver,

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:ApplicationContext.xml
        </param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.organisation.project.rest</param-value>
    </init-param>
</servlet>

उपर्युक्त कोड में, मैं जर्सी और ApplicationContext.xmlकेवल आराम परत को कॉन्फ़िगर कर रहा हूं । उसी के लिए मैं उपयोग कर रहा हूं</init-param>


5

<init-param>यदि आप किसी विशेष सर्वलेट के लिए कुछ पैरामीटर इनिशियलाइज़ करना चाहते हैं तो इसका उपयोग किया जाएगा। जब अनुरोध सर्वलेट में आता है तो पहले इसकी initविधि को कॉल किया जाएगा, doGet/doPostजबकि यदि आप संपूर्ण अनुप्रयोग के लिए कुछ चर को इनिशियलाइज़ करना चाहते हैं तो आपको उपयोग करने की आवश्यकता होगी <context-param>। हर सर्वलेट में संदर्भ चर तक पहुंच होगी।


4

बीच क्या अंतर है <init-param>और <context-param>?

एकल सर्वलेट बनाम एकाधिक सर्वलेट।

अन्य उत्तर विवरण देते हैं, लेकिन यहां सारांश है:

एक वेब ऐप, जो एक "संदर्भ" है, एक या अधिक सर्वलेट्स से बना है

  • <init-param>एक संदर्भ के भीतर एक एकल विशिष्ट सर्वलेट के लिए उपलब्ध मूल्य को परिभाषित करता है ।
  • <context-param>एक संदर्भ के भीतर सभी सर्वलेट्स के लिए उपलब्ध मूल्य को परिभाषित करता है ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.