স্প্রিং এমভিসিতে অ্যাপ্লিকেশন কনটেক্সট এবং ওয়েব অ্যাপ্লিকেশন কনটেক্সট এর মধ্যে পার্থক্য কী?


193

অ্যাপ্লিকেশন প্রসঙ্গ এবং ওয়েব অ্যাপ্লিকেশন প্রসঙ্গের মধ্যে পার্থক্য কী?

আমি সচেতন যে WebApplicationContextস্প্রিং এমভিসি আর্কিটেকচার ওরিয়েন্টেড অ্যাপ্লিকেশনগুলির জন্য ব্যবহৃত হয়?

আমি জানতে চাই ApplicationContextএমভিসি অ্যাপ্লিকেশনগুলির ব্যবহার কী ? এবং সিম কি ধরণের সংজ্ঞায়িত করা হয় ApplicationContext?


5
আমি বিশ্বাস করি না যে এটি স্টকওভারফ্লো / প্রশ্নগুলি / 653৫২০৯০/২ এর সদৃশ That প্রশ্নটি web.xmlফাইলটির বিষয়বস্তু সম্পর্কে জিজ্ঞাসা করে ; এই প্রশ্নটি কিছু স্প্রিং ক্লাস সম্পর্কে জিজ্ঞাসা করছে।
রায়েডওয়াল্ড

@ রেয়েডওয়াল্ড এটি সত্য নয়। অন্য প্রশ্নটি কথা বলছে না web.xmlতবে এটি স্প্রিং এক্সএমএল শিমের কনফিগারেশন রূপগুলির ApplicationContextএবং এর কথা বলছে WebApplicationContext। সমস্ত শিম সংজ্ঞাগুলি তখন applicationContext.xmlপাওয়া যাবে ApplicationContextযখন সমস্ত শিমের সংজ্ঞাগুলি একটিতে *-servlet.xmlউপলব্ধ হবে WebApplicationContext
g00glen00b

উত্তর:


228

ওয়েব অ্যাপ্লিকেশন প্রসঙ্গটি প্রসারিত অ্যাপ্লিকেশন প্রসঙ্গটি প্রমিত করেছে যা স্ট্যান্ডার্ড জাভ্যাক্স.সার্ভলেট.সারলেট কনটেক্সট দিয়ে কাজ করার জন্য ডিজাইন করা হয়েছে যাতে এটি ধারকটির সাথে যোগাযোগ করতে সক্ষম হয়।

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

বিনস, ওয়েব অ্যাপ্লিকেশনকন্টেক্সটে ইনস্ট্যান্টেড এছাড়াও সার্লেটলেট কনটেক্সট ব্যবহার করতে সক্ষম হবেন যদি তারা সার্লেটলেট কনটেক্সট আওয়ার ইন্টারফেস প্রয়োগ করে

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

সার্ভারলেট কনটেক্সট ইনস্ট্যান্সের সাথে করার মতো অনেকগুলি বিষয় রয়েছে, উদাহরণস্বরূপ getResourceAsStream () পদ্ধতিতে কল করে WEB-INF রিসোর্সগুলি (এক্সএমএল কনফিগারেশন এবং ইত্যাদি) অ্যাক্সেস করা। সাধারণত সার্ভলেট স্প্রিং অ্যাপ্লিকেশনে ওয়েব.এক্সএমএল-এ সংজ্ঞায়িত সমস্ত অ্যাপ্লিকেশন প্রসঙ্গগুলি হ'ল ওয়েব অ্যাপ্লিকেশন প্রসঙ্গ, এটি রুট ওয়েব অ্যাপ্লিকেশন প্রসঙ্গে এবং সার্লেটের অ্যাপ প্রসঙ্গে যায়।

এছাড়াও, ওয়েব অ্যাপ্লিকেশন প্রাসঙ্গিক ক্ষমতার উপর নির্ভর করে আপনার অ্যাপ্লিকেশনটিকে পরীক্ষা করা কিছুটা শক্ত করে তুলতে পারে এবং পরীক্ষার জন্য আপনার মক সার্ভেলকন্টেক্সট ক্লাস ব্যবহারের প্রয়োজন হতে পারে ।

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

এটি আপনাকে পুরো অ্যাপ্লিকেশন (স্প্রিং সিকিউরিটি মটরশুটি এবং বেসিক ডাটাবেস অ্যাক্সেস পরিষেবাগুলি সাধারণত এখানে থাকে) এবং সিমের মধ্যে নাম সংঘর্ষ এড়ানোর জন্য সংশ্লিষ্ট সার্লেটগুলিতে পৃথক পরিষেবা হিসাবে কিছু পরিষেবা চালানোর অনুমতি দেয়। উদাহরণস্বরূপ, একটি সার্লেট প্রসঙ্গ ওয়েব পৃষ্ঠাগুলি পরিবেশন করবে এবং অন্যটি স্টেটলেস ওয়েব পরিষেবা প্রয়োগ করবে।

আপনি যখন স্প্রিং সার্লেট ক্লাস ব্যবহার করেন তখন এই দুটি স্তরের বিভাজনটি বাক্সের বাইরে চলে আসে: রুট অ্যাপ্লিকেশন প্রসঙ্গটি কনফিগার করতে আপনার ওয়েব.এক্সএমএলে কনটেক্সট- প্যারাম ট্যাগ ব্যবহার করা উচিত

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

(মূল অ্যাপ্লিকেশন প্রসঙ্গটি ContextLoaderListener দ্বারা তৈরি করা হয় যা ওয়েব.এক্সএমএল- এ ঘোষণা করা হয়

<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>

দয়া করে মনে রাখবেন যে আরম্ভ-পরম বাদ দিলে বসন্তটি এই উদাহরণে myservlet-servlet.xML ব্যবহার করবে।

আরও দেখুন: স্প্রিং ফ্রেমওয়ার্ক এপ্লিকেশনকন্টেক্সটেক্সএক্সএমএল এবং স্প্রিং-সার্লেটলেট.এক্সএমএল এর মধ্যে পার্থক্য


2
উত্তরের জন্য অনেক ধন্যবাদ। আমি শুনেছি যে ওয়েব-অ্যাপ্লিকেশনের জন্য দুটি ধরণের প্রসঙ্গও ব্যবহৃত হয়। একটি রুট অ্যাপ্লিকেশন প্রসঙ্গ হিসাবে কাজ করে যেখানে অ-ওয়েব সম্পর্কিত সংজ্ঞা যেমন পরিষেবা, দাও কনফিগারেশন ইত্যাদি সরবরাহ করা হয় এবং অন্যটি হ্যান্ডলার ম্যাপিংস ইত্যাদির মতো ওয়েব-নির্দিষ্ট কনফিগারেশনের জন্য হয় পূর্বের পিতামাতুল্য প্রসঙ্গ হিসাবে কাজ করে এবং পরবর্তীকালে শিশু প্রসঙ্গ হিসাবে কাজ করে । আমি এই কাঠামোটি কীভাবে ঘোষণা করব তা জানতে চাই। কিছু কনটেক্সটলিস্টনার কলব্যাক শুনেছি। তবে আমি এ সম্পর্কে বেশ অস্পষ্ট।
সুমিত ত্রিহান

1
এই জাতীয় কাঠামোটি স্প্রিং সার্লেট সরঞ্জামগুলিতে হার্ডকোডযুক্ত রয়েছে, স্প্রিং ওয়েব অ্যাপ্লিকেশনটিতে সর্বদা কমপক্ষে দুটি অ্যাপ্লিকেশন প্রসঙ্গ থাকে, আপডেট উত্তরটি দেখুন, আমি আশা করি এটি সহায়তা করে।
বরিস ট্রুখভ


"প্রয়োজনীয় শিমটি বর্তমান অ্যাপ্লিকেশন প্রসঙ্গে উপস্থিত না থাকলে পিতামাতার প্রসঙ্গ থেকে আনা হবে"। আপনি কিভাবে ব্যাখ্যা করতে পারেন? কোনও ওয়েব অ্যাপ্লিকেশন প্রসঙ্গটি কীভাবে রুট অ্যাপ্লিকেশন প্রসঙ্গে শিম অ্যাক্সেস করতে পারে? কোন উদাহরণের সাথে লিঙ্ক?
anir

14

সার্ভলেট দিনগুলিতে ফিরে যেতে, ওয়েব.এক্সএমএলটিতে কেবল একটি থাকতে পারে <context-param>, তাই যখন সার্ভার কোনও অ্যাপ্লিকেশন লোড করে এবং সেই প্রসঙ্গে থাকা ডেটা সমস্ত সংস্থার মধ্যে ভাগ করা হয় (উদাঃ সার্ভলেট এবং জেএসপি) s এটি প্রসঙ্গে ডেটাবেস ড্রাইভারের নাম থাকার মতো, যা পরিবর্তিত হবে না। একইভাবে, যখন আমরা <contex-param>স্প্রিং-এর প্রসঙ্গে কনফিগলোকেশন পরম ঘোষণা করি তখন একটি অ্যাপ্লিকেশন কনটেক্সট অবজেক্ট তৈরি করে।

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

আপনার একটি অ্যাপ্লিকেশনটিতে একাধিক সার্লেট থাকতে পারে। উদাহরণস্বরূপ আপনি একরকমভাবে / নিরাপদ / * অনুরোধগুলি এবং / নন-সিউকার / * অন্যভাবে পরিচালনা করতে চাইতে পারেন। এই প্রতিটি সার্লেটগুলির জন্য আপনার কাছে একটি প্রসঙ্গ অবজেক্ট থাকতে পারে, যা একটি ওয়েব অ্যাপ্লিকেশনস কনটেক্সট।

<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>

13

গৃহীত উত্তরটি রয়েছে তবে এ সম্পর্কে সরকারী ব্যাখ্যা রয়েছে:

ওয়েব অ্যাপ্লিকেশন কনটেক্সট হ'ল প্লেইন অ্যাপ্লিকেশন কনটেক্সট এর একটি এক্সটেনশন যাতে ওয়েব অ্যাপ্লিকেশনগুলির জন্য প্রয়োজনীয় কিছু অতিরিক্ত বৈশিষ্ট্য রয়েছে। এটি একটি সাধারণ অ্যাপ্লিকেশন কনটেক্সট থেকে পৃথক হয় যে এটি থিমগুলি সমাধান করতে সক্ষম (থিম ব্যবহার করে দেখুন), এবং এটি জানে যে এটি কোন সার্লেটের সাথে জড়িত (সার্ভলেট কনটেক্সট-এর একটি লিঙ্ক থাকার মাধ্যমে)। ওয়েব অ্যাপ্লিকেশন কনটেক্সটটি সার্ভলেট কনটেক্সট-এ আবদ্ধ এবং অনুরোধকন্টেক্সটুলস ক্লাসে স্থির পদ্ধতি ব্যবহার করে আপনি যদি অ্যাক্সেসের প্রয়োজন হয় তবে আপনি সর্বদা ওয়েব অ্যাপ্লিকেশনকন্টেক্সট সন্ধান করতে পারেন।

স্প্রিং ওয়েব ফ্রেমওয়ার্ক রেফারেন্স থেকে উদ্ধৃত

উপায় দ্বারা সার্লেট এবং মূল প্রসঙ্গ উভয়ই ওয়েব অ্যাপ্লিকেশন কনটেক্সট :

স্প্রিং ওয়েব এমভিসি-তে সাধারণত প্রসঙ্গের শ্রেণিবিন্যাস


6

অ্যাপ্লিকেশন কনটেক্সট (রুট অ্যাপ্লিকেশন প্রসঙ্গ): প্রতিটি বসন্তের এমভিসি ওয়েব অ্যাপ্লিকেশনটিতে একটি অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল ফাইল থাকে যা প্রসঙ্গ কনফিগারেশনের মূল হিসাবে কনফিগার করা থাকে। স্প্রিং এই ফাইলটি লোড করে এবং পুরো অ্যাপ্লিকেশনটির জন্য একটি অ্যাপ্লিকেশন কনটেক্সট তৈরি করে। এই ফাইলটি ContextLoaderListener দ্বারা লোড করা হয়েছে যা ওয়েব.এক্সএমএল ফাইলে কনটেক্সট প্যারাম হিসাবে কনফিগার করা হয়েছে। এবং প্রতি ওয়েব অ্যাপ্লিকেশনটিতে কেবলমাত্র একটি অ্যাপ্লিকেশন কনটেক্সট থাকবে।

ওয়েব অ্যাপ্লিকেশন কনটেক্সট: ওয়েব অ্যাপ্লিকেশন কনটেক্সট হ'ল ওয়েব সচেতন অ্যাপ্লিকেশন কনটেক্সট অর্থাৎ এটিতে সার্লেট প্রসঙ্গের তথ্য রয়েছে। একটি একক ওয়েব অ্যাপ্লিকেশনটিতে একাধিক ওয়েব অ্যাপ্লিকেশন কনটেক্সট থাকতে পারে এবং প্রতিটি ডিসপ্যাচার সার্ভলেট (যা স্প্রিং এমভিসি আর্কিটেকচারের সম্মুখ নিয়ামক) একটি ওয়েব অ্যাপ্লিকেশন কনটেক্সট এর সাথে যুক্ত। ওয়েব অ্যাপ্লিকেশন কনটেক্সট কনফিগারেশন ফাইল * -servlet.xML একটি ডিসপ্যাচারসার্ভালেটের জন্য নির্দিষ্ট। এবং যেহেতু একটি ওয়েব অ্যাপ্লিকেশনটিতে একাধিক অনুরোধ পরিবেশন করতে একাধিক ডিসপ্যাচার সার্লেটটি কনফিগার করা যেতে পারে, তাই প্রতি ওয়েব অ্যাপ্লিকেশনটিতে একাধিক ওয়েব অ্যাপ্লিকেশন কনটেক্সট ফাইল থাকতে পারে।


3

WebApplicationContextইন্টারফেস দ্বারা নির্দিষ্ট ওয়েব অ্যাপ্লিকেশন প্রসঙ্গ হ'ল একটি ওয়েব অ্যাপ্লিকেশনগুলির জন্য একটি স্প্রিং অ্যাপ্লিকেশন প্রসঙ্গ। WebApplicationContextইন্টারফেসটি ইন্টারফেসটি প্রসারিত করে ApplicationContextএবং ServletContextওয়েব অ্যাপ্লিকেশনের জন্য স্ট্যান্ডার্ড সার্লেটlet এপিআই পুনরুদ্ধারের জন্য একটি পদ্ধতি যুক্ত করে এটিতে একটি নিয়মিত স্প্রিং অ্যাপ্লিকেশন প্রসঙ্গে সমস্ত বৈশিষ্ট্য রয়েছে ।

মান স্প্রিং শিম ছাড়াও সুযোগগুলি singletonএবং prototypeতিনটি অতিরিক্ত একটি ওয়েব অ্যাপ্লিকেশন প্রেক্ষাপটে প্রাপ্তিসাধ্য সুযোগ আছে:

  • request- একটি একক এইচটিটিপি অনুরোধের জীবনচক্রের একক শিম সংজ্ঞাটি স্কোপ করে; এটি হ'ল, প্রতিটি এইচটিটিপি অনুরোধের একটি একক শিম সংজ্ঞা পিছনে তৈরি শিমের নিজস্ব উদাহরণ রয়েছে
  • session - এইচটিটিপি সেশনটির জীবনচক্রের একক শিম সংজ্ঞা দেওয়া হয়েছে sc
  • application - এর আজীবনচক্রের একক শিম সংজ্ঞা দেওয়া যায় es ServletContext
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.