বসন্তে কনটেক্সটলয়েডারলিস্টারের ভূমিকা / উদ্দেশ্য?


169

আমি স্প্রিং ফ্রেমওয়ার্ক শিখছি যা আমার প্রকল্পে ব্যবহৃত হচ্ছে। আমি আমার ওয়েব.এক্সএমএল ফাইলটিতে কনটেক্সটলয়েডারলিস্টনার এন্ট্রি পেয়েছি । কিন্তু এটি ঠিক কীভাবে কোনও বিকাশকারীকে সহায়তা করে তা বুঝতে পারে না?

কনটেক্সটলয়েডারলিস্টনার অফিসিয়াল ডকুমেন্টেশনে এটি বলেছে যে এটি ওয়েব অ্যাপ্লিকেশনকন্টেক্সট শুরু করা । ওয়েব অ্যাপ্লিকেশন কনটেক্সট জাভাডক্স সম্পর্কে বলেছেন:

একটি ওয়েব অ্যাপ্লিকেশন জন্য কনফিগারেশন প্রদান ইন্টারফেস।


তবে কনটেক্সটলডারলিস্টেনারের সাথে আমি কী অর্জন করছি তা আমি বুঝতে সক্ষম হচ্ছি না যা অভ্যন্তরীণভাবে ওয়েব অ্যাপ্লিকেশনস কনটেক্সট শুরু করে ?

আমার বোঝার অনুযায়ী , ContextLoaderListener স্প্রিং কনফিগারেশন ফাইল (ইন contextConfigLocation বিরুদ্ধে দেওয়া মান সার্চ web.xml ), এটা এবং লোড parses Singleton শিম যে কনফিগ ফাইলের মধ্যে নির্ধারণ। একইভাবে আমরা যখন প্রোটোটাইপ শিমটি লোড করতে চাই , আমরা এটি লোড করতে একই ওয়েব অ্যাপ্লিকেশন প্রসঙ্গটি ব্যবহার করব। সুতরাং আমরা কনটেক্সটলডারলিস্টনার দিয়ে ওয়েব অ্যাপ্লিকেশনটি সূচনা করি যাতে আমরা কনফিগার ফাইলটি আগে থেকেই পড় / পার্স / বৈধ করে তুলি এবং যখনই আমরা নির্ভরতা ইনজেকশন করতে চাই আমরা তাড়াতাড়ি কোনও বিলম্ব ছাড়াই এটি করতে পারি। এই বোঝার কি সঠিক?


1
কেউ কি আমাকে অনুরোধকন্টেক্সটলাইস্টনার এবং কনটেক্সটলয়েডারলাইস্টেনারের মধ্যে পার্থক্য জানতে দিতে পারে
ভিডিএক্স

উত্তর:


111

আপনার বোঝাপড়াটি সঠিক। ApplicationContextযেখানে আপনার স্প্রিং মটরশুটি বাস। এর উদ্দেশ্য ContextLoaderListenerদ্বিগুণ:

  1. এর জীবনচক্র গিঁট ApplicationContextএর জীবনচক্র করতে ServletContextএবং

  2. এর তৈরিটি স্বয়ংক্রিয় করতে ApplicationContext, যাতে এটি তৈরি করতে আপনাকে স্পষ্ট কোড লিখতে হবে না - এটি একটি সুবিধার ফাংশন।

এর সম্পর্কে আরেকটি সুবিধাজনক জিনিস ContextLoaderListenerহ'ল এটি একটি তৈরি করে WebApplicationContextএবং মটরশুটি এবং পদ্ধতিটির মাধ্যমে WebApplicationContextঅ্যাক্সেস সরবরাহ করে ।ServletContextServletContextAwaregetServletContext


2
আপনার দ্বিতীয় বক্তব্য সম্পর্কে আমার সন্দেহ আছে। আপনি বলেছিলেন সার্লেটলেট কনটেক্সটলিস্টনার সার্লেটলেট কনটেস্টে অ্যাক্সেস সরবরাহ করে। তবে, এমনকি যদি ওয়েব.এক্সএমএলটিতে সার্লেটলেট কনটেক্সটলিস্টনার না থাকে তবে সার্ভারলেটকন্টেক্সটকে ওয়েব অ্যাপ্লিকেশনসন্টেক্সটেক্সের মাধ্যমে অ্যাক্সেস করা যেতে পারে (ওয়েব অ্যাপ্লিকেশন কনটেক্সটটি স্বতঃপ্রাপ্ত হতে হবে)। সুতরাং, এটি সার্ভলেট কনটেক্সট সম্পর্কিত হুবহু কি করে?
সুমিত দেশাই

এটা তোলে সৃষ্টি WebApplicationContext। অন্যথায় এটি ম্যানুয়ালি তৈরি করা দরকার।
সোর্সডেলিকা

নেই ContextLoaderListenerযখন ওয়েব ধারক স্থবির নিচে সব মটরশুটি ধ্বংস করার একটি পদ্ধতি ধ্বংস বাস্তবায়ন?
asgs

হ্যাঁ - যখন contextDestroyedডাকা হয় তখন এটি ঘটে । এপিআই ডক্স দেখুন।
স্যুরসিডেলিকা

@ সোর্সডেলিকা এটি পড়ার পরে আমার একটি সন্দেহ আছে আমি আমার অ্যাপ্লিকেশনগুলি যাচাই করেছি web.xml। আমার এক্সএমএল ফাইলে দু'জন শ্রোতা ContextLoaderListenerএবং DispatcherServlet। সুতরাং আমি অনুমান করি যে উভয়ের কোনও প্রয়োজন নেই, ContextLoaderListenerআমি কেন জিজ্ঞাসা করছি কেন তা সরিয়ে ফেলা নিরাপদ কারণ অ্যাপ্লিকেশনটি 7-8 মাস থেকে লাইভ থাকে। ওয়েব.এক্সএমএল আপনার রেফারেন্সের জন্য এখানে
আমোগ

43

ContextLoaderListenerহয় ঐচ্ছিক । কেবল এখানে একটি বিষয় বলতে: আপনি কোনও কনফিগার না করেই একটি স্প্রিং অ্যাপ্লিকেশন বুট করতে পারেন ContextLoaderListener, এটির web.xmlসাথে একটি প্রাথমিক ন্যূনতম DispatcherServlet

এটি দেখতে কেমন লাগে তা এখানে:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" 
    version="2.5">
  <display-name>Some Minimal Webapp</display-name>
  <welcome-file-list>   
    <welcome-file>index.jsp</welcome-file>    
  </welcome-file-list>

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

নামক একটি ফাইল তৈরি করুন dispatcher-servlet.xmlএবং এটি অধীনে সংরক্ষণ করুন WEB-INF। যেহেতু আমরা index.jspস্বাগত তালিকায় উল্লেখ করেছি , এই ফাইলটি এর অধীনে যুক্ত করুন WEB-INF

ডেস্প্যাচার-servlet.xml

ইন dispatcher-servlet.xmlআপনার মটরশুটি সংজ্ঞায়িত:

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd     
        http://www.springframework.org/schema/context     
        http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="bean1">
      ...
    </bean>
    <bean id="bean2">
      ...
    </bean>         

    <context:component-scan base-package="com.example" />
    <!-- Import your other configuration files too -->
    <import resource="other-configs.xml"/>
    <import resource="some-other-config.xml"/>

    <!-- View Resolver -->
    <bean 
        id="viewResolver" 
        class="org.springframework.web.servlet.view.UrlBasedViewResolver">
      <property 
          name="viewClass" 
          value="org.springframework.web.servlet.view.JstlView" />
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
    </bean>
</beans>

2
যদি এটি alচ্ছিক হয় তবে আপনি কখন এটি ব্যবহার করতে চান ? মনে হচ্ছে স্প্রিং সিকিউরিটির জন্য DelegatingFilterProxy ব্যবহার করা দরকার।
ডেভিড

6
যখন আপনি নিজের সার্ভারলেট ফাইলটি আপনার কাস্টম অবস্থানে বা কাস্টম নামের সাথে ডিফল্ট নাম "[servlet-name] -servlet.xML" এবং "ওয়েব-আইএনএফ /" এর নিচে পাথের পরিবর্তে রাখতে চান তখন আপনাকে এটি ব্যবহার করতে হবে
রমেশ কর্না

অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল চেয়ে ডিসপ্যাচার-সার্লেট.এক্সএমএলে শিমের সংজ্ঞা দেওয়া কি ভাল ধারণা?
চেতন গোলে

8
সাধারণত আপনার আবেদনের আর্কিটেকচারের স্তরগুলি প্রতিফলিত করে শিম বিতরণ করা ভাল। উপস্থাপনা স্তরটির জন্য বিন (উদাহরণস্বরূপ এমভিসি নিয়ন্ত্রক) প্রেরণকারী-সার্লেটলেট.এক্সএমএল হতে পারে। পরিষেবা স্তরের অন্তর্ভুক্ত মটরশুটিগুলি অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল সংজ্ঞায়িত করা উচিত। এটি কোনও কঠোর নিয়ম নয়, উদ্বেগের বিচ্ছেদ অর্জন করা এটি একটি ভাল অনুশীলন।
ক্লদিও ভেনচুরিনি

2
@ রমেশ কর্ণ আমার মনে হয় না নাম এবং অবস্থান পরিবর্তনের জন্য এটি প্রয়োজন needed আমি মনে করি যখন আমরা একাধিক ডিসপ্যাচার সার্ভলেটগুলি শুরু করতে পারি এবং এখনও চাই যে একটি রুট প্রসঙ্গটি সমস্ত ডিসপ্যাটার সার্ভেলেটের নিজস্ব প্রসঙ্গে ভাগ করা যায় তবে আমাদের কনটেক্সটলডার ব্যবহার করতে হবে।
সুপারনোভা

23

একটি সাধারণ বসন্ত অ্যাপ্লিকেশন জন্য, আপনি আপনার ContextLoaderListenerমধ্যে সংজ্ঞা দিতে হবে না web.xml; আপনি কেবলমাত্র আপনার সমস্ত বসন্ত কনফিগারেশন ফাইল এতে রেখে দিতে পারেন <servlet>:

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/mvc-core-config.xml, classpath:spring/business-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

আরও জটিল স্প্রিং অ্যাপ্লিকেশনের জন্য, যেখানে আপনি একাধিক DispatcherServletসংজ্ঞায়িত করেছেন, আপনার কাছে সাধারণ স্প্রিং কনফিগারেশন ফাইল থাকতে পারে যা DispatcherServletসংজ্ঞায়িত সমস্ত দ্বারা ভাগ করা আছে ContextLoaderListener:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/common-config.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>mvc1</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/mvc1-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>mvc2</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/mvc2-config.xmll</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

কেবল মনে রাখবেন, মূল প্রয়োগের প্রসঙ্গের ContextLoaderListenerজন্য প্রকৃত আরম্ভের কাজটি সম্পাদন করে।

আমি এই নিবন্ধটি অনেক সাহায্য করে খুঁজে পেয়েছি: স্প্রিং এমভিসি - অ্যাপ্লিকেশন প্রসঙ্গ বনাম ওয়েব অ্যাপ্লিকেশন প্রসঙ্গ


এখানে ভাগ করা নিবন্ধটি সত্যই ধারণাগুলির গভীর বোঝার নিশ্চয়তা দেয়
প্রিয়ঙ্ক ঠাক্কর

10

" ContextLoaderListener এর উদ্দেশ্য - স্প্রিং এমভিসি " ব্লগটি খুব ভাল ব্যাখ্যা দিয়েছে।

এটি অনুসারে, অ্যাপ্লিকেশন-কনটেক্সটগুলি হায়ারার্কিয়াল এবং তাই ডিসপাচারসার্লভেটের প্রসঙ্গটি কনটেক্সটলডার লাইস্টেনারের প্রসঙ্গে শিশু হয়ে ওঠে। যার কারণে, কন্ট্রোলার স্তরে (স্ট্রুটস বা স্প্রিং এমভিসি) প্রযুক্তি ব্যবহার করা হচ্ছে কনটেক্সটলয়েডারলিস্টনার তৈরির মূল প্রসঙ্গের থেকে পৃথক হতে পারে।


এটি বন্ধুকে ভাগ করে নেওয়ার জন্য ধন্যবাদ .. :)
দীপক কুমার

3

আপনি যখন নিজের সার্ভারলেট ফাইলটি আপনার কাস্টম অবস্থানে বা কাস্টম নামের সাথে, ডিফল্ট নামকরণ কনভেনশন [servletname]-servlet.xmlএবং পাথের Web-INF/পরিবর্তে রাখতে চান, তখন আপনি ব্যবহার করতে পারেন ContextLoaderListener


3

কনটেক্সটলএডারলিস্টনার হ'ল সার্ভলেট শ্রোতা যা সমস্ত কনফিগারেশন ফাইল (পরিষেবা স্তর কনফিগারেশন, দৃ pers় স্তর বিন্যাস ইত্যাদি) একক বসন্ত অ্যাপ্লিকেশন প্রসঙ্গে লোড করে।

এটি একাধিক XML ফাইল জুড়ে বসন্তের কনফিগারেশনগুলিকে বিভক্ত করতে সহায়তা করে।

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


3

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

আপনি যখন বসন্তের সুরক্ষা ব্যবহার করতে চান তখন এই শ্রোতার দ্বিতীয় ব্যবহার।


3

শিকড় এবং শিশু প্রসঙ্গটি আরও পড়ার আগে দয়া করে বুঝতে পারেন -

বসন্তে একসাথে একাধিক প্রসঙ্গ থাকতে পারে। এর মধ্যে একটি হ'ল মূল প্রসঙ্গ এবং অন্য সমস্ত প্রসঙ্গগুলি শিশু প্রসঙ্গে হবে।

সমস্ত শিশু প্রসঙ্গে মূল প্রসঙ্গে নির্ধারিত মটরশুটিগুলি অ্যাক্সেস করতে পারে; তবে বিপরীতটি সত্য নয়। রুট প্রসঙ্গ শিশু প্রসঙ্গের মটরশুটি অ্যাক্সেস করতে পারে না।

অ্যাপ্লিকেশন কনটেক্সট:

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

ContextLoaderListener মূল অ্যাপ্লিকেশন প্রসঙ্গে প্রকৃত আরম্ভের কাজটি সম্পাদন করে। একটি "কনটেক্সট কনফিগলোকেশন" কনটেক্সট-প্যারাম পড়ুন এবং এর মানটিকে প্রসঙ্গের দৃষ্টান্তের সাথে ছাড়িয়ে এটি সম্ভাব্য একাধিক ফাইল পাথকে পার্স করে যা যেকোন সংখ্যক কমা ও স্পেস দ্বারা পৃথক করা যায়, যেমন "WEB-INF / applicationContext1.xML, WEB-INF / applicationContext2.xml "। ContextLoaderListener alচ্ছিক। এখানে কেবল একটি বক্তব্য রাখুন: আপনি ডিসপ্যাচারসার্ভালেট সহ কেবলমাত্র একটি বেসিক ন্যূনতম ওয়েব.এক্সএমএল কনটেক্সটলডারলিস্টনারটি কনফিগার না করেই একটি স্প্রিং অ্যাপ্লিকেশন বুট করতে পারেন।

ডিসপ্যাচারসার্ভালেট ডিসপ্যাচারসার্ভালেট মূলত একটি সার্লেট (এটি HttpServlet প্রসারিত) যার মূল উদ্দেশ্য কনফিগার করা URL প্যাটার্নের সাথে মেলে আগত ওয়েব অনুরোধগুলি পরিচালনা করা handle এটি আগত ইউআরআই লাগবে এবং নিয়ামক এবং দর্শনের সঠিক সংমিশ্রণটি আবিষ্কার করে। সুতরাং এটি সামনের নিয়ামক।

আপনি যখন বসন্ত কনফিগারেশনে একটি ডিসপ্যাচারসারলিটকে সংজ্ঞায়িত করেন, আপনি কনট্রোল কনফিগলোকেশন অ্যাট্রিবিউট ব্যবহার করে নিয়ামক শ্রেণি, ভিউ ম্যাপিং ইত্যাদির এন্ট্রি সহ একটি এক্সএমএল ফাইল সরবরাহ করেন।

ওয়েব অ্যাপ্লিকেশন কনটেক্সট অ্যাপ্লিকেশন কনটেক্সট ছাড়াও একক ওয়েব অ্যাপ্লিকেশনটিতে একাধিক ওয়েব অ্যাপ্লিকেশন কনটেক্সট থাকতে পারে। সরল কথায়, প্রতিটি ডিসপ্যাচারসারলেট একক ওয়েব অ্যাপ্লিকেশনকন্টেক্সটের সাথে যুক্ত। এক্সএক্সএক্সএক্স-সার্লেট.এক্সএমএল ফাইলটি ডিসপ্যাচারসার্ভলেটের সাথে সুনির্দিষ্ট এবং একটি ওয়েব অ্যাপ্লিকেশনটিতে অনুরোধগুলি পরিচালনা করতে একাধিক ডিসপ্যাচারসারললেট কনফিগার করা যেতে পারে। এই জাতীয় পরিস্থিতিতে, প্রতিটি ডিসপ্যাচারসার্ভালে একটি পৃথক xxx-servlet.xML কনফিগার করা থাকে। তবে, অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল সমস্ত সার্লেলেট কনফিগারেশন ফাইলের জন্য সাধারণ হবে। স্প্রিংটি আপনার ওয়েব অ্যাপস ওয়েবে-আইএনএফ ফোল্ডার থেকে ডিফল্টরূপে "xxx-servlet.xML" নামক লোড ফাইল যেখানে xxx ওয়েব.এক্সএমএল-এ সার্ভলেটের নাম। আপনি যদি সেই ফাইলটির নাম পরিবর্তন করতে বা অবস্থান পরিবর্তন করতে চান, তবে কনটেক্সটফিগলোকেশনকে পরম নাম হিসাবে দীক্ষা-পরম যুক্ত করুন।

তাদের মধ্যে তুলনা এবং সম্পর্ক:

ContextLoaderListener বনাম DispatcherServlet

ContextLoaderListener মূল অ্যাপ্লিকেশন প্রসঙ্গ তৈরি করে। ডিসপ্যাচারসার সার্লেট এন্ট্রিগুলি সার্ভলেট এন্ট্রি প্রতি একটি শিশু অ্যাপ্লিকেশন প্রসঙ্গ তৈরি করে। শিশু প্রসঙ্গে মূল প্রসঙ্গে নির্ধারিত মটরশুটিগুলি অ্যাক্সেস করতে পারে। মূল প্রসঙ্গে শিম শিশু প্রসঙ্গে (সরাসরি) মটরশুটি অ্যাক্সেস করতে পারে না। সার্ভারলেট কনটেক্সটে সমস্ত প্রসঙ্গ যুক্ত করা হয়েছে। আপনি WebApplicationContextUtils ক্লাস ব্যবহার করে মূল প্রসঙ্গে অ্যাক্সেস করতে পারেন।

স্প্রিং ডকুমেন্টেশন পড়ার পরে নিম্নলিখিতটি বোঝা যাচ্ছে:

ক) অ্যাপ্লিকেশন-প্রবন্ধগুলি শ্রেণিবদ্ধ এবং তাই ওয়েব অ্যাপ্লিকেশনস কনটেক্সটস। এখানে ডকুমেন্টেশন রেফারেন্স করুন।

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

গ) ডিসপ্যাচারসার্ভালেট তার নিজস্ব ওয়েব অ্যাপ্লিকেশন কনটেক্সট তৈরি করে এবং হ্যান্ডলার / নিয়ন্ত্রক / ভিউ-রিসোলভারগুলি এই প্রসঙ্গে পরিচালিত হয়।

ঘ) কনস্টেক্সটলডারলিস্টনার যখন ডিসপ্যাচারসার্ভলেটের সাথে ব্যবহার করা হয়, তখন প্রথমে যেমন বলা হয়েছিল তেমনি একটি মূল ওয়েব-অ্যাপ্লিকেশন-প্রসঙ্গ তৈরি করা হয় এবং ডিসপ্যাচারসার্লভেট দ্বারা একটি শিশু-প্রসঙ্গও তৈরি করা হয় এবং মূল অ্যাপ্লিকেশন-প্রসঙ্গে প্রাসঙ্গিকভাবে সংযুক্ত থাকে। এখানে ডকুমেন্টেশন রেফারেন্স করুন।

যখন আমরা স্প্রিং এমভিসির সাথে কাজ করছি এবং পরিষেবাদি স্তরে স্প্রিংটি ব্যবহার করছি তখন আমরা দুটি অ্যাপ্লিকেশন-প্রসঙ্গ সরবরাহ করি। প্রথমটি কনটেক্সটলয়েডারলিস্টনার এবং অন্যটি ডিসপ্যাচারসার্ভালেট ব্যবহার করে কনফিগার করা হয়েছে

সাধারণত, আপনি ডিসপ্যাচারসারভাইলেট প্রসঙ্গে সমস্ত এমভিসি সম্পর্কিত মটরশুটি (কন্ট্রোলার এবং মতামত ইত্যাদি) এবং কনটেক্সটলয়েডারলিস্টনার দ্বারা মূল প্রসঙ্গে সুরক্ষা, লেনদেন, পরিষেবা ইত্যাদির মতো সমস্ত ক্রস কাটানো মটরশুটি সংজ্ঞায়িত করবেন।

আরও তথ্যের জন্য এটি দেখুন: https://siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html


2

মূলত আপনি ContextLoaderListner ব্যবহার করে আপনার মূল অ্যাপ্লিকেশন প্রসঙ্গ এবং ওয়েব অ্যাপ্লিকেশন প্রসঙ্গটি আলাদা করতে পারেন can

কনটেক্সট প্যারামের সাথে ম্যাপযুক্ত কনফিগারেশন ফাইলটি মূল অ্যাপ্লিকেশন প্রসঙ্গ কনফিগারেশন হিসাবে আচরণ করবে। এবং প্রেরণকারী সার্লেট দিয়ে ম্যাপযুক্ত কনফিগারেশন ফাইল ওয়েব অ্যাপ্লিকেশন প্রসঙ্গের মতো আচরণ করবে।

যে কোনও ওয়েব অ্যাপ্লিকেশনটিতে আমাদের একাধিক প্রেরণকারী সার্লেট থাকতে পারে, তাই একাধিক ওয়েব অ্যাপ্লিকেশন প্রসঙ্গে।

তবে যে কোনও ওয়েব অ্যাপ্লিকেশনটিতে আমাদের কাছে কেবলমাত্র একটি রুট অ্যাপ্লিকেশন প্রসঙ্গ থাকতে পারে যা সমস্ত ওয়েব অ্যাপ্লিকেশন প্রসঙ্গের সাথে ভাগ করা হয়।

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

একটি নমুনা ওয়েব.এক্সএমএল

<!-- language: xml -->
<web-app>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>example.config.AppConfig</param-value>
    </context-param>
    <servlet>
        <servlet-name>restEntryPoint</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>example.config.RestConfig</param-value>
        </init-param>       
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>restEntryPoint</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>webEntryPoint</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>example.config.WebConfig</param-value>
        </init-param>       
        <load-on-startup>1</load-on-startup>
    </servlet>  
    <servlet-mapping>
        <servlet-name>webEntryPoint</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app> 

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

PS: এখানে ContextLoaderListener সম্পূর্ণ alচ্ছিক। যদি আমরা এখানে ওয়েব.এক্সএমএমএলে কনটেক্সটলয়েডারলিস্টনার উল্লেখ না করি তবে অ্যাপকনফিগ কাজ করবে না। সেক্ষেত্রে আমাদের আমাদের সমস্ত পরিষেবা এবং সত্তাগুলি ওয়েবকনফিগ এবং রেস্ট কনফিগারে কনফিগার করতে হবে।


1

এটি আপনাকে ওয়েব কোড প্রয়োগের সময় কার্যকর করা হতে পারে এমন কিছু কোড রাখার জন্য পয়েন্ট দেবে


জিগার, আসলে আমি এটিই অনুসন্ধান করার চেষ্টা করছি W ডিফল্ট কনটেক্সট লোডার শ্রেণি স্থাপনের সময়ে কী বৈশিষ্ট্য সরবরাহ করে?
এম শচ

বৈশিষ্ট্য / এক্সএমএল ফাইলগুলি পরিবর্তন করা এবং সার্ভার পুনরায় চালু না করে
রুট

1

শ্রোতা শ্রেণি - একটি ইভেন্টের তালিকা (উদাহরণস্বরূপ .. সার্ভার স্টার্টআপ / শাটডাউন)

কনটেক্সটলয়েডারলিস্টনার -

  1. সার্ভার চলাকালীন সময় বন্ধ / বন্ধ
  2. ইনপুট হিসাবে বসন্তের কনফিগারেশন ফাইলগুলিকে নিয়ে যায় এবং কনফিগারেশন অনুযায়ী মটরশুটি তৈরি করে এটি প্রস্তুত করে তোলে (শাটডাউনের সময় শিমটি নষ্ট করে)
  3. কনফিগারেশন ফাইলগুলি ওয়েব.এক্সএমএলে এই জাতীয় সরবরাহ করা যেতে পারে

    <param-name>contextConfigLocation</param-name>  
    <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>  

1

ContextLoaderListener এর বসন্ত কাঠামোর প্রসঙ্গে আপনার অ্যাপ্লিকেশনটিতে অন্যান্য মটরশুটি লোড করা যেমন মধ্যম স্তর এবং ডেটা-স্তরীয় উপাদানগুলি যা অ্যাপ্লিকেশনটির শেষ প্রান্তটি চালায় drive


0

আপনার বোঝাপড়াটি সঠিক। আমি আশ্চর্য হলাম কেন আপনি কনটেক্সটলয়েডারলিস্টেনারে কোনও সুবিধা দেখছেন না। উদাহরণস্বরূপ, আপনাকে একটি সেশন কারখানা তৈরি করতে হবে (ডাটাবেস পরিচালনা করতে)। এই অপারেশনটি কিছু সময় নিতে পারে, তাই এটি প্রারম্ভকালে করা আরও ভাল। অবশ্যই আপনি এটি init সার্লেট বা অন্য কিছু দিয়ে করতে পারেন, তবে স্প্রিংয়ের পদ্ধতির সুবিধা হ'ল আপনি কোড না লিখে কনফিগারেশন তৈরি করুন।


0

আমরা যদি ContextLoaderListener ব্যতীত ওয়েব.এক্সএমএল লিখি তবে আমরা বসন্ত সুরক্ষায় কাস্টমঅ্যাটেন্টিকেশনপ্রোভাইডার ব্যবহার করে অ্যাথান্টিকেশনটি দিতে পারি না। যেহেতু ডিসপ্যাচারসারভেলিট কনটেক্সটলডারস্টিস্টারের শিশু প্রসঙ্গ, কাস্টমআউটথেন্টিকেশনপ্রোভাইডার কনটেক্সটলয়েডারলিস্টনার হ'ল প্যারেন্টকন্টেক্সটের অংশ। সুতরাং প্যারেন্ট প্রসঙ্গে শিশু প্রসঙ্গে নির্ভরতা থাকতে পারে না। এবং তাই প্রিপার্পারেমে বসন্ত-কনটেক্সট.এক্সএমএল লেখার পরিবর্তে অনুশীলন করা ভাল init


0

আমি বিশ্বাস করি এর আসল ব্যবহার যখন আপনি একাধিক কনফিগারেশন ফাইল রাখতে চান বা আপনার কাছে থাকে তখনই আসবে উদাহরণস্বরূপ প্রয়োগকন্টেক্সটেক্সেক্সএমএল পরিবর্তে xyz.xML ফাইল থাকে

<context-param><param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/training-service.xml, /WEB-INF/training-data.xml</param-value> </context-param>

ContextLoaderListener এর আরেকটি পদ্ধতির নীচের মত ContextLoaderSerlet ব্যবহার করা হচ্ছে

<servlet> <servlet-name>context</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.