স্প্রিং ফ্রেমওয়ার্ক এ প্রয়োগকন্টেক্সটেক্স.এমএমএল এবং স্প্রিং-সার্লেটলেট এক্সএক্সএমএল এর মধ্যে পার্থক্য


373
  • হয় applicationContext.xmlএবং spring-servlet.xmlবসন্ত ফ্রেমওয়ার্ক মধ্যে কোন উপায়ে এর সাথে সম্পর্কিত?
  • ঘোষিত সম্পত্তি ফাইলগুলি applicationContext.xmlকি উপলব্ধ হবে DispatcherServlet?
  • সম্পর্কিত নোটে, কেন আমার মোটামুটি দরকার *-servlet.xml? applicationContext.xmlএকা কেন অপর্যাপ্ত?

1
এটিও দেখুন। stackoverflow.com/questions/11708967/...
Sanghyun লি

উত্তর:


430

স্প্রিং আপনাকে পিতামাতাদের সন্তানের শ্রেণিবিন্যাসে একাধিক প্রসঙ্গ নির্ধারণ করতে দেয়।

applicationContext.xml"মূল ওয়েবঅ্যাপ্লিকেশনটি প্রসঙ্গ", অর্থাত ওয়েবঅ্যাপ্লিকেশনটি সঙ্গে যুক্ত প্রসঙ্গ জন্য মটরশুটি সংজ্ঞায়িত করে।

spring-servlet.xml(অথবা যাই হোক না কেন আপনি অন্য সেটিতে কল) এক সার্ভলেট অ্যাপ্লিকেশান প্রসঙ্গ জন্য মটরশুটি সংজ্ঞায়িত করে। এখন পর্যন্ত, স্প্রিং সার্ভলেট প্রতি এক (যেমন একটি ওয়েব অ্যাপ্লিকেশনটি এই অনেক হতে পারে spring1-servlet.xmlসার্ভলেট জন্য spring1, spring2-servlet.xmlসার্ভলেট জন্য spring2)।

মটরশুটি spring-servlet.xmlশিমের রেফারেন্স দিতে পারে applicationContext.xmlতবে বিপরীতে নয়।

সমস্ত বসন্ত এমভিসি নিয়ন্ত্রকদের অবশ্যই spring-servlet.xmlপ্রসঙ্গে যেতে হবে ।

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


30
আপনার একাধিক বসন্ত সার্লেট থাকবে কেন?
নিমচিম্পস্কি

5
শক্তিশালী শক্তিশালী উত্তর (সংবেদনশীলতার কারণে)
উভচর

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

12
দস্তাবেজগুলি পড়ার আগে এবং অ্যাপ্লিকেশন বিকাশের আগে লোকেরা এই উত্তরটি দেখতে পাবে! সাধারণ ক্ষেত্রে কনটেক্সটলয়েডারলিস্টার এবং প্রসঙ্গে কনফিগলোকেশন করার দরকার নেই, কেবল ডিসপ্যাচারসার সার্লেট!
রুরুস্কি

24
অনেক টিউটোরিয়াল প্রসঙ্গে কনফিগলোকেশন-এ ডিসপ্যাচার-সার্লেট.এক্সএমএল এবং পাশাপাশি ডিসপ্যাচারসারভাইলেট রয়েছে। এর ফলে মটরশুটি দু'বার শুরু করা যায়!
রুরুস্কি

106

দৃশ্যপট 1

ক্লায়েন্ট অ্যাপ্লিকেশনটিতে (অ্যাপ্লিকেশনটি ওয়েব অ্যাপ্লিকেশন নয়, যেমন অ্যাপ্লিকেশনটি সুইং অ্যাপ্লিকেশন হতে পারে)

private static ApplicationContext context = new  ClassPathXmlApplicationContext("test-client.xml");

context.getBean(name);

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

উপসংহার : পরিস্থিতি 1 অ্যাপ্লিকেশনসূচীতে এবং DispatcherServletএটি সম্পর্কিত নয়।

দৃশ্য 2

একটি সার্ভার অ্যাপ্লিকেশনে (অ্যাপ্লিকেশন সার্ভারে স্থাপন করা যেমন টমক্যাট)। ক্লায়েন্ট প্রোগ্রাম (যেমন সুইং অ্যাপ্লিকেশন) থেকে রিমোটিংয়ের মাধ্যমে অ্যাক্সেস করা পরিষেবা

ওয়েব.এক্সএমএলে শ্রোতাদের সংজ্ঞা দিন

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

সার্ভার স্টার্টআপে ContextLoaderListenerমটরশুটিটি এপ্লিকেশনসন্টেক্সটেক্স.এমএমএলে সংজ্ঞায়িত করে

ধরে নিচ্ছি আপনি অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএলে নিম্নলিখিতটি সংজ্ঞায়িত করেছেন :

<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />

মটরশুটিগুলি চারটি কনফিগারেশন ফাইল test1.xml , test2.xML , test3.xML , test4.xML থেকে ইনস্ট্যান্ট করা হয় ।

উপসংহার : পরিস্থিতি 2 অ্যাপ্লিকেশনসন্টেক্সটে এবং DispatcherServletসম্পর্কিত নয়।

পরিস্থিতি 3

স্প্রিং এমভিসি সহ একটি ওয়েব অ্যাপ্লিকেশনটিতে।

ইন web.xml সংজ্ঞায়িত:

<servlet>
    <servlet-name>springweb</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
</servlet>

<servlet-mapping>
    <servlet-name>springweb</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

টমক্যাট শুরু হয়ে গেলে স্প্রিংওয়েব-সার্লেট.এক্সএমএল সংজ্ঞায়িত মটরশুটিগুলি তাত্ক্ষণিকভাবে চিহ্নিত করা হয়। DispatcherServletপ্রসারিত FrameworkServlet। ইন FrameworkServletশিম ইনস্ট্যান্স springweb জন্য সঞ্চালিত হয়। আমাদের ক্ষেত্রে স্প্রিংওয়েব হ'ল ফ্রেমওয়ার্ক ।

উপসংহার : পরিস্থিতি 3 অ্যাপ্লিকেশনসূচিতে এবং DispatcherServletএটি সম্পর্কিত নয়।

দৃশ্য 4

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

ইন web.xml নিম্নলিখিত সংজ্ঞায়িত করা হয়:

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

<servlet>
    <servlet-name>springweb</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        
</servlet>

<servlet-mapping>
    <servlet-name>springweb</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

সার্ভার প্রারম্ভকালে, অ্যাপ্লিকেশনContextLoaderListener কনটেক্সট.এক্সএমএল সংজ্ঞায়িত মটরশুটি ইনস্ট্যান্ট করে ; ধরে নিচ্ছি যে আপনি এখানে ঘোষণা করেছেন:

<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />

মটরশুটিগুলি সমস্ত চারটি test1.xML , test2.xML , test3.xML , test4.xML থেকে সমস্ত ইনস্ট্যান্টেশনযুক্ত । অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএলে সংজ্ঞায়িত শিম ইনস্ট্যান্টেশন সমাপ্তির পরে , স্প্রিংওয়েব-সার্লেট.এক্সএমএল সংজ্ঞায়িত শিমগুলি তাত্ক্ষণিকভাবে তৈরি করা হয়।

সুতরাং ইনস্ট্যান্টেশন অর্ডারটি হ'ল: রুট (অ্যাপ্লিকেশন প্রসঙ্গ), তারপরে ফ্রেমওয়ার্ক সার্লেট।

এখন এটি স্পষ্ট হওয়া উচিত যে তারা কোন দৃশ্যে গুরুত্বপূর্ণ।


10
+1 টি। খুব ভাল।আমি এই ধরণের তুলনা খুঁজছিলাম, কিন্তু পাই নি।
নিনাদ পিংগেল

@ বিবিশকর ভট্টরাই খুব ভাল, আমার প্রশ্ন: তাহলে "পরিস্থিতি ৪"
লরেন্স

DispatcherServletইউআরএল। অ্যাকশন দিয়ে শেষ না হলে স্প্রিংওয়েব কল হবে না?
আসিফ মোশতাক

@ লরেন্স আপনাকে এখনও স্প্রিংওয়েব-সার্লেটলেট.এক্সএমএলে শ্রেণীর পথ নির্দিষ্ট করতে হবে যাতে স্প্রিং তার স্ক্যানে সেই উপাদানটি খুঁজে পেতে পারে।
veritas

54

আরও একটি বিষয় যোগ করতে চাই want ইন spring-servlet.xmlআমরা কন্ট্রোলার প্যাকেজের জন্য উপাদান স্ক্যান অন্তর্ভুক্ত। নিম্নলিখিত উদাহরণে আমরা কন্ট্রোলার প্যাকেজের জন্য ফিল্টার টীকা অন্তর্ভুক্ত করি।

<!-- Scans for annotated @Controllers in the classpath -->
<context:component-scan base-package="org.test.web" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

ইন applicationcontext.xmlআমরা নিয়ামক ব্যতীত অবশিষ্ট প্যাকেজের জন্য ফিল্টার যোগ করুন।

<context:component-scan base-package="org.test">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

9
কেন? শুধু একবারে পুরো জিনিসটি স্ক্যান করবেন না কেন?
নিমচিম্পস্কি

3
@ নিমচিম্পস্কি আপনাকে সার্লেট @Controllerপ্রসঙ্গে (স্প্রিং এমভিসি দ্বারা প্রয়োজনীয়) মটরশুটি স্ক্যান করতে হবে।
টুউকা মস্তোনেন

3
পুরো জিনিসটি দু'বার করতে পারছেন না কেন? কেন অন্তর্ভুক্ত / বাদ?
মাইক রাইল্যান্ডার 16

8
তোলা যায় ব্যবহার-ডিফল্ট-ফিল্টার যোগ করা উচিত = বসন্ত-servlet.xml মধ্যে "মিথ্যা" অ্যাট্রিবিউট
রাকেশ Waghela

4
রাকেশ ওয়াঘেলার বক্তব্য আছে। সেই বৈশিষ্ট্য ছাড়াই নিয়ামক মটরশুটি দুটিবার তৈরি করা হবে। প্রথমত appContext এবং দ্বিতীয়ত servletContext মধ্যে
UltraMaster

12

সহজ কথায়,

applicationContext.xmlসমস্ত সার্লেটগুলির মধ্যে ভাগ করা শিমগুলি সংজ্ঞায়িত করে। যদি আপনার অ্যাপ্লিকেশনটিতে একাধিক সার্লেট রয়েছে তবে এর মধ্যে সাধারণ উত্সগুলি সংজ্ঞায়িত করুনapplicationContext.xml হবে।

spring-servlet.xmlমটরশুটিগুলি সংজ্ঞায়িত করে যা কেবলমাত্র সেই সার্লেটের সাথে সম্পর্কিত। এখানে এটি প্রেরণকারী সার্লেট রয়েছে। সুতরাং, আপনার স্প্রিং এমভিসি নিয়ন্ত্রকদের অবশ্যই এই ফাইলে সংজ্ঞায়িত করতে হবে।

spring-servlet.xmlআপনি যদি আপনার ওয়েব অ্যাপ্লিকেশনটিতে কেবল একটি সার্ভলেট চালিয়ে যাচ্ছেন তবে সমস্ত মটরশুটি সংজ্ঞায়িত করার কোনও সমস্যা নেই ।


3
আমি বসন্ত-সার্লেটলেট.এক্সএমএলগুলিতে সমস্ত মটরশুটি সংজ্ঞায়িত করতে পারি, তবে এ ক্ষেত্রে অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল খালি (মটরশুটি ছাড়াই) থাকতে পারে। সঠিক?
মিখাইল কোপিলভ

6

সার্লেলেট প্রযুক্তিতে যদি আপনি কোনও নির্দিষ্ট সার্লেটে কোনও ইনপুট পাস করতে চান তবে আপনাকে নীচের কোডের মতো থ্রিম পারমে পাস করতে হবে।

 <servlet>
    <servlet-name>DBController</servlet-name>
    <servlet-class>com.test.controller.DBController</servlet-class>
    <init-param>
        <param-name>username</param-name>
        <param-value>John</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>DBController</servlet-name>
    <url-pattern>/DBController</url-pattern>
</servlet-mapping>

আপনি যদি এমন কিছু পুট পাস করতে চান যা সমস্ত সার্লেলেটের জন্য সাধারণ তবে সেই সময় আপনার প্রসঙ্গে প্যারাম কনফিগার করতে হবে। উদাহরণ

 <context-param>
    <param-name>email</param-name>
    <param-value>admin@example.com</param-value>
</context-param>

ঠিক ঠিক এই জাতীয় যখনই আমরা স্প্রিং এমভিসি নিয়ে কাজ করি তখন আমাদের স্প্রিংয়ের প্রদত্ত প্রিডফাইন্ড সার্ভলেট যা ইনপ প্যারামের মাধ্যমে ডিসপ্যাটচার সার্লেট হয় তার কিছু তথ্য সরবরাহ করতে হবে। সুতরাং কনফিগারেশনটি পতনের মতো, এখানে আমরা স্প্রিং-সার্লেলেট.এক্সএমএলকে ডিসপ্যাচারসার্ভলেটে প্রাথমিক পরামিতি হিসাবে সরবরাহ করছি।

 <?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_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>Spring MVC App</display-name>

    <servlet>
        <servlet-name>SpringController</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringController</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
</web-app>

আবার আমাদের কিছু প্রসঙ্গের পরম দরকার। এটি পুরো আবেদনের জন্য প্রযোজ্য। সুতরাং আমরা মূল প্রসঙ্গটি সরবরাহ করতে পারি যা এপ্লিকেশন কনটেক্সট.এক্সএমএল কনফিগারেশনটি এর মতো:

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationcontext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
        <servlet-name>SpringController</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringController</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

4

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

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