Unterschied zwischen Servlet und Webdienst

87

Was ist der Unterschied zwischen diesen 2? Ich habe bei Google nur wenige Ergebnisse gefunden, die nichts aussagekräftiges sind.

Hier ist eine Folgefrage:

Angenommen, ich erstelle eine Spring MVC-Webanwendung, kommentiere einige Klassen mit @ Controller-Annotation und erstelle etwas, das einige Informationen erfolgreich vom Front-End -> Back-End und umgekehrt überträgt, und möglicherweise ist eine Datenbank auf der Back-End-Seite beteiligt.

Wie würdest du das nennen? Rest Web Service oder Servlet oder etwas anderes?

Gandalf StormCrow
quelle
6
Ein Ratschlag: Wenn Sie nicht wissen, was ein Servlet ist, haben Sie wahrscheinlich Probleme mit Spring MVC (mit Anmerkungen). Eine einfachere Lösung (Vanille-Servlet + JDBC) wird Ihnen wahrscheinlich helfen, die Grundlagen schneller zu erlernen.
Biziclop
1
Wenn ein Servlet nur ein aussagekräftiges Verhalten aufweist und dieses Servlet einer expliziten URL zugeordnet ist, sehe ich keinen Grund, warum (1) GET- oder POST-Parameter nicht an das Servlet gesendet werden konnten. (2) Die Antwort des Servlets könnte darin bestehen, eine Last von zurückzugeben XML mit einem geeigneten MIME-Typ (3), dass dies nicht gleichbedeutend mit einem Webdienst im akademischen Sinne ist?
8bitjunkie
@GandalfStormCrow Beim Servlet handelt es sich bei den tatsächlich übergebenen Daten nicht um Daten, sondern um ein HTML-Dokument. HTML-Dokument ist besser geeignet für Anfragen wie 1) das Dokument erhalten 2) das Dokument anzeigen , vom Menschen zum Computer. Die Notwendigkeit bestand jedoch in einer maschinenunabhängigen App-App-Kommunikation. Der Webdienst spricht also über die Datenübertragung von Daten mithilfe von XML über http.
Überaustausch

Antworten:

89

Ein Webdienst ist ein Dienst, der seinen Clients Dienstmethoden bereitstellt, die entweder das REST-Programmierparadigma oder das SOAP-Protokoll für die Kommunikation verwenden. Es gibt verschiedene Möglichkeiten, einen Webdienst zu implementieren. Die einfachste Möglichkeit , einen Web - Service zu schreiben wäre, eine Klasse zu schreiben und mit Anmerkungen versehen es mit den @WebServiceund @WebMethodAnmerkungen aus javax.jws, und dann startet von einem main-Methode mit:

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

Das Ergebnis ist, dass Sie die WSDL unter der registrierten URL anzeigen können. Wenn Sie über SoapUI oder einen anderen SOAP-Client verfügen, können Sie Ihren Webdienst auch testen und verwenden.

Ein Servlet hingegen wird zum Transportieren von HTTP- Anforderungen und -Antworten verwendet. Es kann verwendet werden, um eine Webanwendung mit JSPs und HTML zu schreiben oder um XML- und JSON-Antworten (wie in einem RESTful-Dienst) bereitzustellen und natürlich auch SOAP-Nachrichten zu empfangen und zurückzugeben. Sie können sich das als eine Ebene unter den Webdiensten vorstellen . Servlets haben ihren eigenen Standard, der derzeit die Java-Servlet-Spezifikation Version 4.0 ist

Ein umfassenderer und praktischerer Ansatz besteht darin, einen Webdienst mit einem Framework zu schreiben und auf einem Anwendungsserver oder Servlet-Container wie Tomcat oder JBoss zu veröffentlichen. In diesem Fall würden Sie ein Servlet verwenden, um den Transport der HTTP-Anforderungen zu handhaben, die Ihre SOAP- oder REST-Nachrichten übertragen.

Um einen Webdienst mit Servlet-Technologie zu schreiben, können Sie beispielsweise JAX-WS (z. B. für SOAP) verwenden. Um RESTful-Services zu schreiben, können Sie entweder JAX-RS (mit der Referenzimplementierung Jersey ) oder alternativ Spring WebMVC verwenden . Soweit ich weiß, ist dies jedoch nicht der Hauptzweck dieses Frameworks, und Jersey ist erheblich einfacher zu bedienen.

Zur zweiten Frage: Die @ControllerAnnotation ist eine Spring- spezifische Stereotyp-Annotation, die Spring etwas darüber sagt, was Ihre Bohne tun soll. Was genau eine Methode eines Controllers zurückgibt, hängt von der tatsächlichen Implementierung Ihrer Methoden ab. Sie können Spring so konfigurieren, dass Klartext, HTML, JSON, XML, Binärdaten oder was auch immer Sie möchten zurückgeben.

Eine Anmerkung nebenbei, eine Klasse, mit der Anmerkungen versehen sind, @Controllerist noch kein Servlet, sondern lediglich eine Bean. Wie Sie Servlets verwenden, hängt hauptsächlich vom verwendeten Framework ab. Wenn Sie beispielsweise Spring verwenden, wird der Servlet-Job von Springs ausgeführt, DispatcherServletdie wiederum Anforderungen an die richtigen Beans weiterleiten. Wenn Sie Tomcat verwenden, können Sie Ihre eigenen Servlets direkt schreiben, indem Sie einfach die javax.servlet.http.HttpServletKlasse unterordnen und die erforderlichen Methoden überschreiben, z. B. doGetdie auf HTTP-GET-Anforderungen von Ihrem Browser reagieren.

Lanoxx
quelle
3
"entweder REST oder SOAP als Protokoll" ... aber REST ist kein Protokoll !!
Kein Fehler
3
Stark gesagt, es ist kein Programmierparadigma. Ich habe meine Formulierung korrigiert, um dies widerzuspiegeln.
Lanoxx
@lanoxx Ziel eines Webdienstes ist es, eine Unternehmensanwendung einfach in eine andere zu integrieren, vorausgesetzt, diese Anwendungen müssen neu miteinander kommunizieren . Integration von Unternehmensanwendungen .
Überaustausch
Der Link über der Java-Servlet-Spezifikation (jetzt 4.0) ist nicht mehr verfügbar. Er
Manohar Reddy Poreddy
43

Was Sie beschreiben, ist eine Webanwendung , bei der ein Mensch einen Browser verwendet, um mit einem Softwaresystem zu interagieren.

Ein Webdienst ist eine Möglichkeit für Softwaresysteme, über HTTP und XML oder JSON miteinander zu kommunizieren, ohne dass Menschen beteiligt sind.

Ein Servlet ist eine Java-spezifische Methode zum Schreiben von Software, die auf HTTP-Anforderungen reagiert. Spring MVC abstrahiert viele Implementierungsdetails, um das Schreiben von Webanwendungen zu vereinfachen, verwendet jedoch Servlets unter der Decke.

Artbristol
quelle
Der Programmierstil der Webanwendung kann auch für die Kommunikation von Softwaresystemen verwendet werden, aber ich gehe davon aus, dass dies keine strukturierte Programmiermethode ist und nicht der in der IT-Branche verwendete Standard.
Mohamed Iqzas
10

Ich gehe davon aus, dass der Webdienst eine Abstraktion auf höherer Ebene definiert, z. B. einige geschäftsspezifische Funktionen. Während Servlet nur eine Software-Implementierungskomponente ist, die für den Datentransport verantwortlich ist.

Die Implementierung eines Webdienstes basiert normalerweise auf einem Servlet zum Empfangen von Daten. Es kann jedoch auch die benutzerdefinierte Ebene für den Umgang mit Protokolldaten verwenden.

@Controller hat wahrscheinlich mehr mit dem Webdienst zu tun als mit dem Servlet, das wiederum eine Möglichkeit darstellt, den Transport zu implementieren.

Alex Gitelman
quelle
1
@Controllerist Teil des Spring Web MVC-Frameworks (es ist das C), es ist also definitiv keine Webdienstsache, aber es ist auch nicht eng mit Servlets verbunden.
Biziclop
Ich stimme zu, @Controller ist in keiner Weise ein Webdienst für sich. Ich persönlich verwende @Controller jedoch häufig als Endpunkt für REST-Services. Ich vermute, dass es eine weniger beliebte Verwendung von Spring MVC ist.
Alex Gitelman
3

Der offensichtlichste Unterschied zwischen Servlet und Webdienst besteht darin, dass Sie über HTTP auf das Servlet zugreifen, während Sie über SOAP (Simple Object Access Protocol) auf den Webdienst zugreifen. Tatsächlich können Sie ein Servlet jedoch nicht direkt aufrufen. Sie können die URL-Verbindung nur öffnen und dem Servlet Parameter hinzufügen, wenn der Aufrufer nicht in Ihrer Anwendung ist. Und Sie können nicht einschränken, welche Parameter der Anrufer setzen kann. Der Anrufer weiß auch nicht, welche Parameter Ihr Servlet empfangen kann. Wenn Sie den Webdienst verwenden, um API für andere Anwendungen bereitzustellen, kann die WSDL-Datei Ihres Webdienstes dem Anrufer genügend Informationen geben, um Ihren Webdienst aufzurufen.

Chinni
quelle
2

Ein Servlet ist ein HTTP-Abfragehandler. Mit Ihren eingehenden Anfragen können Sie tun, was Sie wollen. Ein Servlet, das auf der JVM ausgeführt wird.

Ein Webdienst ist an ein mehr oder weniger starres Protokoll gebunden: Eine Schnittstelle (API) wird mit verfügbaren Methoden und deren Argumenten und Rückgabewerten für den Dienst definiert.

Diese Schnittstelle wird mithilfe der Protokollmechanismen verfügbar gemacht. Diese Protokolle sind unabhängig vom Host, auf dem der Dienst ausgeführt wird: Sie können denselben Webdienst mit PHP, Java, C # oder Ihrer eigenen Sprache definieren. Sie benötigen nur einen Code, der Abfragen für das Protokoll versteht und vom Client lesbare Antworten liefert.

Zum Beispiel ist SOAP ein Webdienstprotokoll: Wikipedia-Definition:

SOAP, ursprünglich als Simple Object Access Protocol definiert, ist eine Protokollspezifikation für den Austausch strukturierter Informationen bei der Implementierung von Webdiensten in Computernetzwerken.

Guillaume
quelle
2

Webdienste arbeiten auf einer höheren Ebene als Servlets. Servlets sind APIs, die einfach sind und Funktionen zum Schreiben von serverseitigen Komponenten bieten.

Zum Beispiel ist RESTfull ein Webdienst, der neben dem Servlet viele andere "Funktionen" enthält. Für die Bereitstellung definieren wir die Datei web.xml möglicherweise als -

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

Das ist nichts als ein Servlet

dgm
quelle
2

Der Webdienst verwendet die ServletContainer-Klasse, die wiederum eine Servlet-Klasse ist, die die Anforderung auf saubere und strukturierte Weise verarbeitet. Das REST steht für REpresentational STateless Protocol. Hier werden in der Anfrage keine Daten gespeichert.

Der REST-Webdienst unterstützt HTTP-Methoden

  1. GET - Normalerweise zum Abrufen von Daten.
  2. POST - Zum Einfügen eines neuen Objekts.
  3. PUT - Zum Aktualisieren des vorhandenen Objekts.
  4. DELETE -Um das Objekt zu löschen.

Wir können der Webdienstklasse eine beliebige Anzahl von URLs zuordnen, die über beliebige HTTP-Methoden verfügen können.

Andererseits kann für jedes Servlet nur eine URL-Zuordnung durchgeführt werden. Obwohl die Endanforderung mit Hilfe von Anforderungsparameterbedingungen erreicht werden kann, bietet die Verwendung von Servlets heutzutage keinen sauberen Weg.

Im Webservice können wir den URL-Pfad sowohl auf Klassen- als auch auf Methodenebene definieren , wodurch wir strukturierter codieren können.

Kranti123
quelle