Quelle est la différence entre ces 2? J'ai trouvé peu de résultats sur google rien de concluant.
Voici une question de suivi:
Supposons que je crée une application Web printanière MVC annotez quelques classes avec l'annotation @Controller et crée quelque chose qui permette de transférer certaines informations de 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 appellerais-tu ça? Service Web ou servlet de repos ou autre chose?
A 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. Le moyen le plus simple d'écrire un service Web serait d'écrire une classe et de l'annoter avec les annotations @WebService
Et @WebMethod
À partir de javax.jws
, Puis de le lancer à partir d'un main
- méthode avec:
Endpoint.publish("http://localhost:8089/myservice", new MyWebService());
Le résultat est que vous pouvez afficher le [~ # ~] wsdl [~ # ~] à l'adresse URL enregistrée et si vous avez SoapUI ou tout autre client SOAP, vous pouvez également tester et utilisez votre service Web.
Un servlet est en revanche utilisé pour transporter [~ # ~] http [~ # ~] les requêtes et les réponses. Il peut être utilisé pour écrire une application Web avec 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 voir comme une couche sous les services Web. Les servlets ont leur propre standard qui est actuellement le Java Servlet Specification Version 4.
Une approche plus complète et plus pratique consiste à écrire un service Web avec une structure et à le publier sur un serveur d'applications ou un conteneur de servlets 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 utiliser JAX-RS (avec l'implémentation de référence Jersey), ou bien utiliser Spring WebMVC. , mais je pense que ce n’est pas l’objectif principal de ce framework et que Jersey est considérablement plus facile à utiliser.
Concernant la deuxième question: L'annotation @Controller
Est une annotation de stéréotype spécifique Spring qui indique à Spring quelque chose à propos de ce que votre bean est censé faire. Le résultat exact d'une méthode de 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 annotée avec @Controller
N'est pas encore une servlet, c'est simplement un bean. Votre utilisation des servlets dépend principalement de la structure que vous utilisez. Par exemple, lorsque vous utilisez Spring, le travail de servlet est effectué par Springs DispatcherServlet
qui, à son tour, transmet les demandes aux bons beans. Si vous utilisez Tomcat, vous pouvez alors écrire directement vos propres servlets en sous-classant simplement la classe javax.servlet.http.HttpServlet
Et en écrasant les méthodes nécessaires telles que doGet
, qui répond aux requêtes HTTP GET de votre navigateur.
Ce que vous décrivez est une application Web, dans laquelle un humain utilise un navigateur pour interagir avec un logiciel.
Un service Web est un moyen pour les systèmes logiciels de communiquer entre eux via HTTP et XML ou JSON, sans implication humaine.
A servlet est une manière d’écrire un logiciel spécifique à Java qui répond aux requêtes HTTP. Spring MVC fait abstraction d’une grande partie des détails de l’implémentation pour faciliter l’écriture d’applications Web, mais utilise des servlets sous la couverture.
Mon opinion est que le service Web définit une abstraction de niveau supérieur, telle que certaines fonctionnalités spécifiques à une entreprise. Alors que Servlet est juste un composant d’implémentation logicielle responsable du transport des données.
L'implémentation du service Web dépend généralement du servlet pour la réception 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 service Web que servlet, ce qui, encore une fois, est un moyen d'implémenter le transport.
La différence la plus évidente entre Servlet et Service Web est la suivante: vous accédez à un servlet via HTTP tout en accédant à un service Web via SOAP (Protocole d'accès d'objet simple)). Cependant, vous ne pouvez pas invoquer directement un servlet. , vous ne pouvez ouvrir une connexion URL et définir un paramètre sur le servlet que si l'appelant n'est pas dans votre application. Vous ne pouvez pas restreindre les paramètres que l'appelant peut définir. L'appelant ne sait pas non plus quels paramètres votre servlet peut recevoir. Vous feriez mieux d'utiliser un service Web pour fournir une API à d'autres applications. Le fichier WSDL de votre service Web peut fournir à l'appelant suffisamment d'informations pour appeler votre service Web.
Les services Web fonctionnent à un niveau supérieur à celui des servlets. Les servlets sont des API simples à utiliser qui permettent d'écrire des composants côté serveur.
Par exemple, RESTfull est un service Web qui contient de nombreuses autres "fonctionnalités" ainsi qu'un servlet. Pour déployer, nous pouvons définir le fichier 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
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 machine virtuelle Java.
Un service Web est lié à un protocole plus ou moins rigide: une interface (API) est définie avec les méthodes disponibles, leurs arguments et les valeurs de retour du service.
Cette interface est exposée à l'aide des mécanismes de protocole. Ces protocoles ne dépendent pas 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 devez simplement disposer d'un morceau de code capable de comprendre les requêtes du protocole et de produire des réponses lisibles par le client.
Par exemple, SOAP est un protocole de service Web: définition de Wikipedia:
SOAP, défini à l'origine comme protocole d'objet simple, est une spécification de protocole permettant d'échanger des informations structurées lors de la mise en œuvre de services Web dans des réseaux informatiques.
Le service Web utilise la classe ServletContainer, qui est à nouveau une classe Servlet, qui traite la demande de manière propre et structurée. Le REST signifie REpresentational STateless Protocol. Dans ce cas, la demande ne stockera aucune donnée.
Le REST service Web prend en charge les méthodes HTTP
Nous pouvons mapper un nombre illimité d'URL sur la classe de service Web pouvant contenir n'importe quel type de méthode HTTP.
D'autre part, il ne peut y avoir qu'un seul mappage d'URL pouvant être effectué pour chaque servlet. Bien que la condition finale puisse être atteinte à l’aide de conditions de paramètre de requête, l’utilisation de servlet de nos jours n’est plus une méthode propre.
Dans le service Web, nous pouvons définir le chemin de l'URL à niveau classe ainsi qu'à niveau méthode, ce qui nous permet de coder de manière plus structurée.