Différence entre servlet et service Web

88

Quelle est la différence entre ces 2? J'ai trouvé quelques résultats sur google rien de concluant.

Voici une question complémentaire:

Supposons que je crée une application Web Spring mvc, annote deux classes avec l'annotation @Controller et crée quelque chose qui transférera avec succès certaines informations du front-end -> back-end et vice versa et peut-être qu'une base de données pourrait être impliquée du côté back-end.

Comment appelleriez-vous ça? Reste un service Web ou un servlet ou autre chose?

Gandalf StormCrow
la source
6
Un conseil: si vous ne savez pas ce qu'est un servlet, vous aurez probablement du mal avec spring mvc (avec annotations). Une solution plus simple (vanilla servlet + jdbc) vous aidera probablement à apprendre les bases plus rapidement.
biziclop
1
Si un servlet n'a qu'un seul comportement significatif et que ce servlet est mappé à une URL explicite, je ne vois aucune raison pour laquelle (1) les paramètres GET ou POST n'ont pas pu être envoyés au servlet (2) La réponse du servlet pourrait être de renvoyer une charge de XML avec un ensemble de types MIME approprié (3) que cela n'équivaut pas à un service Web au sens académique?
8bitjunkie
@GandalfStormCrow Avec le servlet, les données réelles qui sont transmises ne sont pas des données mais un document html. Le document html est plus approprié pour les demandes comme 1) obtenir le document 2) afficher le document , de l'homme à l'ordinateur. Mais le besoin était une communication application-application indépendante de la machine. Ainsi, le service Web parle de transfert de données de données à l'aide de xml sur http.
surexchange

Réponses:

90

Un service Web est un service qui fournit des méthodes de service à ses clients en utilisant le paradigme de programmation REST ou le protocole SOAP pour la communication. Il existe plusieurs façons de mettre en œuvre un service Web. La façon la plus simple d'écrire un service Web serait d'écrire une classe et de l'annoter avec les annotations @WebServiceet @WebMethodde javax.jws, puis de la lancer à partir d'une mainméthode avec:

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

Le résultat est que vous pouvez afficher le WSDL à l'URL enregistrée et si vous avez SoapUI ou tout autre client SOAP, vous pouvez également tester et utiliser votre service Web.

Un servlet , d'autre part, est utilisé pour transporter les requêtes et réponses HTTP . Il peut être utilisé pour écrire une application Web avec des JSP et HTML, ou pour servir des réponses XML et JSON (comme dans un service RESTful) et bien sûr aussi pour recevoir et renvoyer des messages SOAP. Vous pouvez le considérer comme une couche sous les services Web . Les servlets ont leur propre standard qui est actuellement la version 4.0 de la spécification de servlet Java

Une approche plus complète et pratique consiste à écrire un service Web avec un framework et à le publier sur un serveur d'application ou un conteneur de servlet tel que Tomcat ou JBoss. Dans ce cas, vous utiliseriez un servlet pour gérer le transport des requêtes HTTP qui transmettent vos messages SOAP ou REST.

Pour écrire un service Web avec la technologie de servlet, vous pouvez par exemple utiliser JAX-WS (par exemple pour SOAP). Pour écrire des services RESTful, vous pouvez soit utiliser JAX-RS (avec l'implémentation de référence étant Jersey ), soit vous pouvez utiliser Spring WebMVC , mais pour autant que je sache, ce n'est pas l'objectif principal de ce framework et Jersey est considérablement plus facile à utiliser.

Concernant la deuxième question: l' @Controllerannotation est une annotation stéréotypée spécifique à Spring qui dit quelque chose à Spring sur ce que votre bean est censé faire. Ce que retournera exactement une méthode d'un contrôleur dépend de l'implémentation réelle de vos méthodes, vous pouvez configurer Spring pour renvoyer du texte brut, HTML, JSON, XML, des données binaires ou ce que vous voulez.

Une note sur le côté, une classe qui est annotée @Controllern'est pas encore une servlet, c'est simplement un bean. La façon dont vous utilisez les servlets dépend principalement du Framework que vous utilisez. Par exemple, lorsque vous utilisez Spring, le travail de servlet est effectué par Springs DispatcherServletqui à son tour transmet les requêtes aux beans appropriés. Si vous utilisez Tomcat, vous pouvez directement écrire vos propres servlets en sous-classant simplement la javax.servlet.http.HttpServletclasse et en écrasant les méthodes nécessaires telles que doGetqui répond aux requêtes HTTP GET de votre navigateur.

lanoxx
la source
3
"soit REST ou SOAP comme protocole" ... Mais REST n'est pas un protocole !!
Pas un bug
3
Fortement parlant, ce n'est pas le cas, c'est un paradigme de programmation. J'ai corrigé ma formulation pour refléter cela.
lanoxx
@lanoxx L'objectif d'un service Web est d'aider à intégrer facilement une application d'entreprise à une autre, en supposant que ces nouvelles applications aient besoin de se parler. Intégration d'applications d'entreprise .
surexchange
Au-dessus de la spécification Java Servlet (maintenant 4.0), le lien est mort, peut maintenant être trouvé sur une nouvelle page d'accueil / github à javaee.github.io/servlet-spec/DOWNLOADS.html
Manohar Reddy Poreddy
43

Ce que vous décrivez est une application Web , dans laquelle un humain utilise un navigateur pour interagir avec un système logiciel.

Un service Web est un moyen pour les systèmes logiciels de communiquer entre eux en utilisant HTTP et XML ou JSON, sans intervention humaine.

Un servlet est une manière spécifique à Java d'écrire un logiciel qui répond aux requêtes HTTP. Spring MVC résume une grande partie des détails de l'implémentation pour faciliter l'écriture d'applications Web, mais utilise des servlets sous les couvertures.

artbristol
la source
Le style de programmation d'application Web peut également être utilisé pour que les systèmes logiciels communiquent entre eux, mais je suppose que ce n'est pas une méthode de programmation structurée et que ce n'est pas la norme utilisée dans l'industrie informatique.
Mohamed Iqzas
10

Mon point de vue serait que le service Web définit une abstraction de niveau supérieur, telle que certaines fonctionnalités spécifiques à l'entreprise. Alors que Servlet n'est qu'un composant d'implémentation logicielle responsable du transport des données.

L'implémentation du service Web repose généralement sur un servlet pour recevoir des données. Cependant, il peut également utiliser sa couche personnalisée de traitement des données de protocole.

@Controller est probablement plus lié au Web Service qu'au servlet qui est, encore une fois, un moyen d'implémenter le transport.

Alex Gitelman
la source
1
@Controllerfait partie du framework Spring Web MVC (c'est le C), donc ce n'est certainement pas une chose de service Web, mais il n'est pas non plus étroitement lié aux servlets.
biziclop
Je suis d'accord, @Controller n'est en aucun cas un service Web en soi. Mais personnellement, j'ai tendance à utiliser @Controller souvent comme point final pour les services REST. Je soupçonne que c'est une utilisation moins populaire de Spring MVC.
Alex Gitelman
3

La différence la plus évidente entre le servlet et le service Web est: Vous accédez au servlet via HTTP tout en accédant au service Web via SOAP (Simple Object Access Protocol). Mais, en fait, vous ne pouvez pas appeler directement un servlet, vous ne pouvez ouvrir la connexion URL et mettre un paramètre au servlet que si l'appelant est hors de votre application. Et vous ne pouvez pas restreindre les paramètres que l'appelant peut mettre. L'appelant ne sait pas non plus quels paramètres votre servlet peut recevoir. Donc, vous feriez mieux d'utiliser le service Web pour fournir une API à d'autres applications, le fichier WSDL de votre service Web peut donner à l'appelant suffisamment d'informations pour appeler votre service Web.

Chinni
la source
2

Un servlet est un gestionnaire de requêtes HTTP. Vous pouvez faire ce que vous voulez avec vos requêtes entrantes. Un servlet exécuté sur la JVM.

Un service web est lié à un protocole plus ou moins rigide: une interface (API) est définie avec les méthodes disponibles et leurs arguments et valeurs de retour pour le service.

Cette interface est exposée en utilisant les mécanismes du protocole. Ces protocoles sont indépendants de l'hôte qui exécutera le service: vous pouvez définir le même service Web en utilisant PHP, Java, C # ou votre propre langage. Vous avez seulement besoin d'un morceau de code capable de comprendre les requêtes pour le protocole et capable de produire des réponses lisibles par le client.

Par exemple, SOAP est un protocole de service Web: définition de Wikipedia:

SOAP, initialement défini comme Simple Object Access Protocol, est une spécification de protocole pour l'échange d'informations structurées dans la mise en œuvre de services Web dans des réseaux informatiques.

Guillaume
la source
2

Les services Web fonctionnent à un niveau plus élevé que les servlets. Les servlets sont des API simples et offrant des capacités pour écrire des composants côté serveur.

Par exemple, RESTfull est un service Web qui contient de nombreuses autres «fonctionnalités» avec un servlet. Pour déployer, nous pouvons définir le web.xml comme -

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

qui n'est autre qu'une servlet

dgm
la source
2

Le service Web utilise la classe ServletContainer qui est à nouveau une classe Servlet, qui gère la demande de manière propre et structurée. Le REST signifie REpresentational STateless Protocol. Ici, la demande ne stockera aucune donnée.

Le service Web REST prend en charge les méthodes HTTP

  1. GET - Habituellement pour récupérer des données.
  2. POST - Pour insérer un nouvel objet.
  3. PUT - Pour mettre à jour l'objet existant.
  4. DELETE -Pour supprimer l'objet.

Nous pouvons mapper n'importe quel nombre d'URL à la classe de service Web qui peut avoir n'importe quel type de méthodes HTTP.

D'un autre côté, il ne peut y avoir qu'un seul mappage d'URL pour chaque servlet. Bien que l'exigence finale puisse être atteinte à l'aide de conditions de paramètres de requête, l'utilisation de servlet de nos jours ne fournira pas un moyen propre.

Dans le service Web, nous pouvons définir le chemin de l'URL au niveau de la classe ainsi qu'au niveau de la méthode , ce qui nous permet de coder de manière plus structurée.

Kranti123
la source