আরম্ভ-পরম এবং প্রসঙ্গ-পরম


88

মধ্যে পার্থক্য কি <init-param>এবং <context-param>?


@ আরসি। এই প্রশ্নটি যেখানে এই দুটি প্যারামের মধ্যে পার্থক্য নিয়ে আলোচনা করেছে .. এটি কেবলমাত্র দুটি প্রসঙ্গে লোড হওয়া সম্পত্তি সম্পর্কে ..
রোহিত জৈন

আমি শিরোনামে থামলাম, আমার খারাপ।

উত্তর:


122

<init-param>এবং <context-param>স্ট্যাটিক পরামিতি যা ওয়েব.এক্সএমএল ফাইলে সংরক্ষণ করা হয়। আপনার যদি এমন কোনও ডেটা থাকে যা ঘন ঘন পরিবর্তন হয় না তবে আপনি সেগুলির একটিতে এটি সঞ্চয় করতে পারেন।

আপনি যদি কোনও নির্দিষ্ট ডেটা সঞ্চয় করতে চান যা কোনও নির্দিষ্ট সার্লেট স্কোপের মধ্যে সীমাবদ্ধ থাকে তবে আপনি ব্যবহার করতে পারেন <init-param>inside আপনি যা কিছু ঘোষণা করেন <init-param>তা কেবলমাত্র সেই নির্দিষ্ট সার্লেটের জন্যই অ্যাক্সেসযোগ্য init আর্ট - প্যারাম <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>

কোনও জেএসপি বা সার্লেলে অ্যাপ্লিকেশনটির ব্যবহার

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

4
প্রোগ্রাম্যাটিকভাবে কনটেক্সট-পরামিতি কীভাবে সেট করবেন?
গৌরব

4
@ গৌরব আকর্ষণীয়, আমি এর জন্য একটি পদ্ধতি খুঁজে পেতে পারি <init-param>: ServletContext::setInitParameter(String name, String value)তবে প্রসঙ্গের প্যারামিটার সেট করার জন্য একটি নয় <context-param>
বেসিল Bourque

8

ওয়েব.এক্সএমএলে নীচের সংজ্ঞাটি বিবেচনা করুন

<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 সংজ্ঞায়িত করা হয়েছে। এর অর্থ এটি কেবলমাত্র ঘোষণার আওতায় সার্ভলেটের জন্য উপলব্ধ এবং ওয়েব অ্যাপ্লিকেশনের অন্যান্য অংশে নয়। আপনি যদি এই প্যারামিটারটি অ্যাপ্লিকেশনটির অন্যান্য অংশে উপলভ্য হতে চান তবে কোনও জেএসপিকে বলতে হবে এটি স্পষ্টভাবে জেএসপিকে দেওয়া উচিত। উদাহরণস্বরূপ অনুরোধ.সেটআট্রিবিউট () হিসাবে পাস হয়েছে। এটি অত্যন্ত অদক্ষ এবং কোড করা কঠিন।

সুতরাং আপনি যদি সেই মানগুলি স্পষ্টভাবে পাস না করে অ্যাপ্লিকেশনটির মধ্যে যে কোনও জায়গা থেকে বিশ্বব্যাপী মানগুলিতে অ্যাক্সেস পেতে চান, আপনার প্রসঙ্গে কনটেক্সট ইনি প্যারামিটার ব্যবহার করতে হবে।

ওয়েব.এক্সএমএলে নিম্নলিখিত সংজ্ঞাটি বিবেচনা করুন

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

এই কনটেক্সট প্যারামটি ওয়েব অ্যাপ্লিকেশনটির সমস্ত অংশে উপলব্ধ এবং এটি প্রসঙ্গ অবজেক্ট থেকে পুনরুদ্ধার করা যেতে পারে। উদাহরণস্বরূপ, getServletContext ()। GetInitParameter ("dbname");

কোনও জেএসপি থেকে আপনি অ্যাপ্লিকেশন অন্তর্ভুক্ত অবজেক্টটি ব্যবহার করে প্রসঙ্গের প্যারামিটারটি অ্যাক্সেস করতে পারেন। উদাহরণস্বরূপ, 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>কারণ আমার সমস্ত সার্লেটগুলি এমভিসি কাঠামোর সাথে ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করবে।

হোয়ারভার,

<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>একটি পরিপ্রেক্ষিতে সমস্ত সার্লেলেটের জন্য উপলব্ধ একটি মান নির্ধারণ করে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.