it-swarm-eu.dev

Unterschied zwischen Servlet und Webservice

Was ist der Unterschied zwischen diesen 2? Ich habe auf google wenig aussagekräftige Ergebnisse gefunden.

Hier ist eine Folgefrage:

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

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

84

Ein Webdienst ist ein Dienst, der seinen Clients Dienstmethoden zur Verfügung stellt, 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 Webdienst zu schreiben, besteht darin, eine Klasse zu schreiben und sie mit den Anmerkungen @WebService und @WebMethod aus javax.jws zu kommentieren und sie dann mit einer main- Methode zu starten:

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

Das Ergebnis ist, dass Sie [~ # ~] wsdl [~ # ~] unter der registrierten URL anzeigen können. Wenn Sie über SoapUI oder einen anderen SOAP - Client verfügen, können Sie dies auch testen und nutzen Sie Ihren Web-Service.

Ein Servlet wird dagegen verwendet, um [~ # ~] http [~ # ~] Anforderungen und Resonses zu transportieren. Es kann zum Schreiben einer Webanwendung mit JSPs und HTML oder zum Bereitstellen von XML- und JSON-Antworten (wie bei einem RESTful-Service) und natürlich auch zum Empfangen und Zurückgeben von SOAP - Nachrichten verwendet werden. Sie können es sich vorstellen als eine Schicht unter den Webdiensten. Servlets haben einen eigenen Standard, der derzeit Java Servlet Specification Version 4. 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 abzuwickeln, die Ihre SOAP - oder REST - Nachrichten übertragen.

Um einen Webservice 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 , aber afaik das ist nicht der Hauptzweck dieses Frameworks und Jersey ist wesentlich einfacher zu bedienen.

Zur zweiten Frage: Die Annotation @Controller ist eine Spring spezifische stereotype Annotation, die Spring 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 es Nur-Text-, HTML-, JSON-, XML-, Binärdaten oder beliebige andere Daten zurückgibt.

Eine Anmerkung auf der Seite, eine Klasse, die mit @Controller kommentiert ist, ist noch kein Servlet, es ist einfach eine Bohne. Wie Sie Servlets verwenden, hängt hauptsächlich vom verwendeten Framework ab. Wenn Sie beispielsweise Spring verwenden, wird der Servlet-Job von Springs DispatcherServlet ausgeführt, die wiederum Anforderungen an die richtigen Beans weiterleiten. Wenn Sie Tomcat verwenden, können Sie Ihre eigenen Servlets direkt schreiben, indem Sie einfach die Klasse javax.servlet.http.HttpServlet unterordnen und die erforderlichen Methoden wie doGet überschreiben, die auf HTTP-GET-Anforderungen Ihres Browsers reagieren.

83
lanoxx

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 Art, Software zu schreiben, die auf HTTP-Anfragen reagiert. Spring MVC abstrahiert viele Implementierungsdetails, um das Schreiben von Webanwendungen zu vereinfachen, verwendet jedoch Servlets im Hintergrund.

41
artbristol

Ich gehe davon aus, dass der Web-Service eine höhere Abstraktionsebene definiert, z. B. einige geschäftsspezifische Funktionen. Während Servlet nur eine Software-Implementierungskomponente ist, die für den Datentransport verantwortlich ist.

Bei der Implementierung von Webdiensten wird normalerweise das Servlet zum Empfangen von Daten verwendet. Es kann jedoch auch die benutzerdefinierte Ebene für den Umgang mit Protokolldaten verwenden.

@Controller ist wahrscheinlich eher mit dem Web-Service verwandt als mit dem Servlet, mit dem wiederum der Transport implementiert werden kann.

10
Alex Gitelman

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

3
Chinni

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

Beispielsweise ist RESTfull ein Webdienst, der neben dem Servlet viele andere "Funktionen" enthält. Für die Bereitstellung können wir die Datei "web.xml" wie folgt definieren:

<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 anderes als ein Servlet

2
dgm

Ein Servlet ist ein HTTP-Abfragehandler. Sie können mit Ihren eingehenden Abfragen 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 ihren Argumenten und Rückgabewerten für den Dienst definiert.

Diese Schnittstelle wird über die Protokollmechanismen zugänglich 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 für den Client lesbare Antworten liefert.

Zum Beispiel SOAP ist ein Webdienstprotokoll: Wikipedia-Definition:

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

2
Guillaume

Der Webdienst verwendet die ServletContainer-Klasse, die wiederum eine Servlet-Klasse ist, die die Anforderung sauber und strukturiert verarbeitet. Das REST steht für REpresentational STateless Protocol. Hier speichert die Anfrage keine Daten.

Der REST Web Service unterstützt HTTP-Methoden

  1. GET - Normalerweise, um Daten abzurufen.
  2. POST - Neues Objekt einfügen.
  3. PUT - Zum Aktualisieren des vorhandenen Objekts.
  4. DELETE - Zum Löschen des Objekts.

Wir können einer Web-Service-Klasse eine beliebige Anzahl von URLs zuordnen, die eine beliebige Art von HTTP-Methoden haben können.

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

Im Webservice können wir den URL-Pfad sowohl auf Klassenebene als auch auf Methodenebene definieren, um eine strukturiertere Codierung zu ermöglichen.

2
Kranti123