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?
java
web-services
spring
rest
terminology
Gandalf StormCrow
quelle
quelle
Antworten:
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
@WebService
und@WebMethod
Anmerkungen ausjavax.jws
, und dann startet von einemmain
-Methode mit: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
@Controller
Annotation 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,
@Controller
ist 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,DispatcherServlet
die wiederum Anforderungen an die richtigen Beans weiterleiten. Wenn Sie Tomcat verwenden, können Sie Ihre eigenen Servlets direkt schreiben, indem Sie einfach diejavax.servlet.http.HttpServlet
Klasse unterordnen und die erforderlichen Methoden überschreiben, z. B.doGet
die auf HTTP-GET-Anforderungen von Ihrem Browser reagieren.quelle
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.
quelle
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.
quelle
@Controller
ist 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.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.
quelle
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:
quelle
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 -
Das ist nichts als ein Servlet
quelle
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
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.
quelle