सर्वलेट और वेब सेवा के बीच अंतर


88

इन 2 में क्या अंतर है? मुझे Google पर कुछ परिणाम निर्णायक नहीं मिला।

यहाँ एक अनुवर्ती प्रश्न है:

मान लीजिए कि मैं @Controller एनोटेशन के साथ स्प्रिंग mvc वेब ऐप एनोटेट जोड़े बनाता हूं और ऐसा कुछ बनाता हूं जो फ्रंट एंड से कुछ जानकारी को सफलतापूर्वक स्थानांतरित करेगा -> बैक एंड और इसके विपरीत और शायद कुछ डेटाबेस बैक एंड साइड पर शामिल हो सकते हैं।

आप उसे क्या कहेंगे? बाकी वेब सेवा या सर्वलेट या कुछ और?


6
सलाह का एक शब्द: यदि आप नहीं जानते कि एक सर्वलेट क्या है, तो आपको स्प्रिंग mvc (एनोटेशन के साथ) के साथ संघर्ष करने की संभावना है। एक सरल समाधान (वेनिला सर्वलेट + jdbc) संभवतया मूल बातें सीखने में आपकी सहायता करेगा।
biziclop

1
यदि किसी सर्वलेट में केवल एक सार्थक व्यवहार होता है और उस सर्वलेट को एक स्पष्ट URL पर मैप किया जाता है, तो मुझे कोई कारण नहीं दिखता कि क्यों (1) GET या POST पैरामीटर को सर्वलेट (2) में नहीं भेजा जा सकता है। सर्वलेट की प्रतिक्रिया एक लोड वापस करने के लिए हो सकती है एक उपयुक्त MIME प्रकार सेट (3) के साथ XML कि यह अकादमिक अर्थों में किसी वेब सेवा के लिए टेंथमाउंट नहीं है?
8bitjunkie

@GandalfStormCrow सर्वलेट के साथ जो वास्तविक डेटा पास किया जा रहा है, वह डेटा नहीं है, बल्कि HTML डॉक्यूमेंट है। html डॉक्यूमेंट 1 के लिए अधिक उपयुक्त है जैसे 1) डॉक्यूमेंट 2 प्राप्त करें ) डॉक्यूमेंट को प्रदर्शित करें , मानव से कंप्यूटर तक। लेकिन, जरूरत एक मशीन स्वतंत्र रूप से ऐप-ऐप संचार की थी। इसलिए, वेब सेवा http पर xml का उपयोग करके डेटा के डेटा ट्रांसफर के बारे में बात करती है।
ओवरएक्सचेंज

जवाबों:


90

एक वेब सेवा एक सेवा है जो संचार के लिए REST प्रोग्रामिंग प्रतिमान या SOAP प्रोटोकॉल का उपयोग करके अपने ग्राहकों को सेवा विधियां प्रदान करती है। वेब सेवा को लागू करने के कई तरीके हैं। एक वेब सेवा लिखने के लिए सबसे आसान तरीका एक वर्ग में लिखने के लिए और साथ उस पर टिप्पणी होगी @WebServiceऔर @WebMethodसे एनोटेशन javax.jws, और फिर एक से इसे लॉन्च mainके साथ -method:

Endpoint.publish("http://localhost:8089/myservice", new MyWebService());

इसका परिणाम यह है कि आप WSDL को पंजीकृत URL पर देख सकते हैं और यदि आपके पास SoapUI या कोई अन्य SOAP क्लाइंट है तो आप अपनी वेब सेवा का परीक्षण और उपयोग भी कर सकते हैं।

दूसरी ओर एक सर्वलेट का उपयोग HTTP अनुरोधों और प्रतिक्रियाओं को परिवहन करने के लिए किया जाता है । इसका उपयोग जेएसपी और एचटीएमएल के साथ एक वेब एप्लिकेशन लिखने के लिए या एक्सएमएल और जेएसएन प्रतिक्रियाओं की सेवा करने के लिए किया जा सकता है (जैसा कि एक प्रतिष्ठित सेवा में) और निश्चित रूप से एसओएपी संदेशों को प्राप्त करने और वापस करने के लिए भी। आप इसे वेब सेवाओं के नीचे एक परत के रूप में सोच सकते हैं । सर्वलेट्स का अपना मानक है जो वर्तमान में जावा सर्वलेट स्पेसिफिकेशन वर्जन 4.0 है

एक अधिक व्यापक और व्यावहारिक दृष्टिकोण एक वेब सेवा को एक फ्रेमवर्क के साथ लिखना है और इसे एक एप्लिकेशन सर्वर या सर्वलेट कंटेनर जैसे कि टॉमकैट या जेबॉस पर प्रकाशित करना है। इस स्थिति में आप HTTP अनुरोधों के परिवहन को संभालने के लिए एक सर्वलेट का उपयोग करेंगे जो आपके SOAP या REST संदेशों को प्रसारित करता है।

सर्वलेट तकनीक के साथ एक वेब सेवा लिखने के लिए आप उदाहरण के लिए JAX-WS (जैसे SOAP) का उपयोग कर सकते हैं। रेस्टफुल सेवाओं को लिखने के लिए, आप या तो JAX-RS (संदर्भ कार्यान्वयन जर्सी के साथ ) का उपयोग कर सकते हैं, या वैकल्पिक रूप से आप स्प्रिंग वेबएमवीसी का उपयोग कर सकते हैं , लेकिन जहां तक ​​मुझे पता है कि इस ढांचे का मुख्य उद्देश्य नहीं है और जर्सी काफी है। उपयोग करने में आसान।

दूसरे प्रश्न के बारे में: @Controllerएनोटेशन एक स्प्रिंग स्पेसिफिक स्टीरियोटाइप एनोटेशन है जो स्प्रिंग को कुछ बताता है कि आपका बीन क्या करने वाला है। नियंत्रक की एक विधि वास्तव में क्या लौटेगी यह आपके तरीकों के वास्तविक कार्यान्वयन पर निर्भर करता है, आप सादे पाठ, HTML, JSON, XML, बाइनरी डेटा या जो भी आप चाहते हैं उसे वापस करने के लिए स्प्रिंग को कॉन्फ़िगर कर सकते हैं।

किनारे पर एक नोट, एक वर्ग जिसे एनोटेट किया गया @Controllerहै वह अभी तक एक सर्वलेट नहीं है, यह केवल एक सेम है। आप सर्वलेट्स का उपयोग कैसे करते हैं यह मुख्य रूप से आपके द्वारा उपयोग किए जाने वाले फ्रेमवर्क पर निर्भर करता है। उदाहरण के लिए, जब आप स्प्रिंग का उपयोग करते हैं, तो सर्वलेट कार्य स्प्रिंग्स द्वारा किया जाता है DispatcherServletजो बदले में सही फलियों के लिए अनुरोध करता है। यदि आप टॉमकैट का उपयोग करते हैं, तो आप सीधे अपने स्वयं के सर्वलेट्स लिख सकते हैं बस javax.servlet.http.HttpServletकक्षा को उपवर्गित कर सकते हैं और आवश्यक विधियों को लिख सकते हैं जैसे कि doGetआपके ब्राउज़र से HTTP जीईटी अनुरोधों का जवाब देता है।


3
"या तो REST या SOAP इसके प्रोटोकॉल के रूप में" ... लेकिन REST एक प्रोटोकॉल नहीं है !!
बग नहीं

3
इसकी दृढ़ता से बात करते हुए, यह एक प्रोग्रामिंग प्रतिमान है। मैंने यह दर्शाने के लिए अपने सूत्रीकरण को सही किया है।
लैनोक्स

एक वेब सेवा का @lanoxx लक्ष्य एक उद्यम अनुप्रयोग को अन्य के साथ आसानी से एकीकृत करने में मदद करना है, उन अनुप्रयोगों को नया मानते हुए, एक दूसरे से बात करने की आवश्यकता है। एंटरप्राइज़ अनुप्रयोग एकीकरण
ओवरएक्सचेंज

ऊपर जावा सर्वलेट विनिर्देश (अब 4.0) लिंक मृत है, अब javaee.github.io/servlet-spec/DOWNLOADS.html
मनोहर रेड्डी गोर्डी

43

आप जो वर्णन कर रहे हैं वह एक वेब एप्लिकेशन है , जहां एक मानव एक सॉफ्टवेयर सिस्टम के साथ बातचीत करने के लिए एक ब्राउज़र का उपयोग करता है।

एक वेब सेवा एक तरह से सॉफ्टवेयर सिस्टम के लिए HTTP और XML या JSON का उपयोग करके एक दूसरे के साथ संवाद करने का एक तरीका है, जिसमें कोई भी मनुष्य शामिल नहीं है।

एक सर्वलेट एक जावा-विशिष्ट सॉफ्टवेयर लिखने का तरीका है जो HTTP अनुरोधों का जवाब देता है। स्प्रिंग एमवीसी वेब अनुप्रयोगों को लिखने को आसान बनाने के लिए कार्यान्वयन विस्तार का एक बहुत दूर करता है, लेकिन कवर के तहत सर्वलेट का उपयोग करता है।


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

10

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

वेब सेवा कार्यान्वयन आमतौर पर डेटा प्राप्त करने के लिए सर्वलेट पर निर्भर करेगा। हालांकि, यह प्रोटोकॉल डेटा से निपटने की कस्टम परत का उपयोग कर सकता है।

@Controller शायद सर्वलेट की तुलना में वेब सेवा से अधिक संबंधित है, जो फिर से, परिवहन को लागू करने का एक तरीका है।


1
@Controllerस्प्रिंग वेब एमवीसी फ्रेमवर्क (यह सी) का हिस्सा है, इसलिए यह निश्चित रूप से एक वेब सेवा नहीं है, लेकिन न तो यह सर्वलेट्स से निकटता से संबंधित है।
बिजिकोप्लोप

मैं मानता हूं, @ कंट्रोलर किसी भी तरह से अपने आप में एक वेब सेवा नहीं है। लेकिन व्यक्तिगत रूप से मैं REST सेवाओं के लिए अंत बिंदु के रूप में अक्सर @Controller का उपयोग करता हूं। मुझे संदेह है कि यह स्प्रिंग एमवीसी का कम लोकप्रिय उपयोग है।
एलेक्स गिटेलमैन

3

सर्वलेट और वेब सेवा के बीच सबसे स्पष्ट अंतर है: आप एसओएपी (सिंपल ऑब्जेक्ट एक्सेस प्रोटोकॉल) के माध्यम से वेब सेवा का उपयोग करते समय HTTP के माध्यम से सर्वलेट का उपयोग करते हैं। लेकिन, वास्तव में, आप सीधे एक सर्वलेट नहीं ला सकते हैं, आप केवल URL कनेक्शन खोल सकते हैं और कॉल करने वाले के लिए कुछ पैरामीटर डाल सकते हैं यदि कॉलर आपके आवेदन से बाहर है। और आप यह नहीं प्रतिबंधित कर सकते हैं कि कॉलर कौन से पैरामीटर डाल सकता है। कॉल करने वाले को यह पता नहीं होता है कि आपका सर्वलेट किन मापदंडों को प्राप्त कर सकता है। तो, आप अन्य एप्लिकेशनों को एपीआई प्रदान करने के लिए बेहतर वेब सेवा का उपयोग करेंगे, आपकी वेब सेवा की डब्ल्यूएसडीएल फ़ाइल कॉलर को आपकी वेब सेवा को लागू करने के लिए पर्याप्त जानकारी दे सकती है।


2

एक सर्वलेट एक HTTP क्वेरी हैंडलर है। आप अपने आने वाले प्रश्नों के साथ जो चाहें कर सकते हैं। एक सर्वलेट जेवीएम पर चलता है।

एक वेब सेवा को अधिक या कम कठोर प्रोटोकॉल से जोड़ा जाता है: एक इंटरफ़ेस (एपीआई) उपलब्ध तरीकों और सेवा के लिए उनके तर्कों और वापसी मूल्यों के साथ परिभाषित किया गया है।

यह इंटरफ़ेस प्रोटोकॉल तंत्रों का उपयोग करके उजागर किया गया है। ये प्रोटोकॉल होस्ट के बारे में अज्ञेय हैं जो सेवा चलाएंगे: आप PHP, जावा, C # या अपनी भाषा का उपयोग करके उसी वेब सेवा को परिभाषित कर सकते हैं। आपको केवल प्रोटोकॉल के लिए प्रश्नों को समझने में सक्षम कोड का एक टुकड़ा होना चाहिए और क्लाइंट द्वारा पठनीय उत्तर देने में सक्षम होना चाहिए।

उदाहरण के लिए SOAP एक वेब सेवा प्रोटोकॉल है: विकिपीडिया परिभाषा:

मूल रूप से साधारण ऑब्जेक्ट एक्सेस प्रोटोकॉल के रूप में परिभाषित SOAP, कंप्यूटर नेटवर्क में वेब सेवाओं के कार्यान्वयन में संरचित जानकारी के आदान-प्रदान के लिए एक प्रोटोकॉल विनिर्देश है।


2

वेब सेवाएँ सर्वलेट्स की तुलना में उच्च स्तर पर संचालित होती हैं। सर्वलेट्स एपीआई है जो सरल है और सर्वर साइड घटकों को लिखने की क्षमता प्रदान करता है।

उदाहरण के लिए Restfull एक वेब सेवा है जिसमें सर्वलेट के साथ कई अन्य "कार्यक्षमता" शामिल हैं। तैनात करने के लिए, हम web.xml को इस प्रकार परिभाषित कर सकते हैं -

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>jersey.rest.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

जो कोई नहीं बल्कि एक सर्वलेट है


2

वेब सेवा ServletContainer वर्ग का उपयोग करती है जो फिर से एक सर्वलेट क्लास है, जो स्वच्छ और संरचित तरीके से अनुरोध को संभालता है। आरईएसटी का मतलब होता है रीकंस्ट्रक्शन स्टेटलेस प्रोटोकॉल। यहां अनुरोध किसी भी डेटा को संग्रहीत नहीं करेगा।

REST वेब सेवा HTTP विधियों का समर्थन करती है

  1. GET - आमतौर पर डेटा लाने के लिए।
  2. POST - नई वस्तु डालने के लिए।
  3. डाल - मौजूदा ऑब्जेक्ट को अपडेट करने के लिए।
  4. हटाएँ - ऑब्जेक्ट को हटाएं।

हम किसी भी प्रकार के URL को वेब सेवा वर्ग में मैप कर सकते हैं जिसमें किसी भी प्रकार के HTTP तरीके हो सकते हैं।

दूसरी ओर, प्रत्येक सर्वलेट के लिए केवल 1 URL मैपिंग हो सकती है। हालांकि अंतिम आवश्यकता अनुरोध पैरामीटर शर्तों की मदद से प्राप्त की जा सकती है, लेकिन आजकल सर्वलेट का उपयोग करने से स्वच्छ रास्ता नहीं मिलेगा।

Webservice में हम URL पथ को क्लास स्तर के साथ-साथ Method level में परिभाषित कर सकते हैं , जो हमें अधिक संरचित तरीके से कोड करने की अनुमति देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.