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 @WebService
et @WebMethod
de javax.jws
, puis de la lancer à partir d'une main
mé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' @Controller
annotation 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 @Controller
n'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 DispatcherServlet
qui à 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.HttpServlet
classe et en écrasant les méthodes nécessaires telles que doGet
qui répond aux requêtes HTTP GET de votre navigateur.