Un servicio web es un servicio que proporciona métodos de servicio a sus clientes utilizando el paradigma de programación REST o el protocolo SOAP para la comunicación. Hay varias formas de implementar un servicio web. La forma más sencilla de escribir un servicio web sería escribir una clase y anotarla con las anotaciones @WebService
y @WebMethod
de javax.jws
, y luego lanzarlo desde un main
método-con:
Endpoint.publish("http://localhost:8089/myservice", new MyWebService());
El resultado es que puede ver el WSDL en la URL registrada y si tiene SoapUI o cualquier otro cliente SOAP, también puede probar y utilizar su servicio web.
Por otro lado, un servlet se utiliza para transportar solicitudes y respuestas HTTP . Puede usarse para escribir una aplicación web con JSP y HTML, o para servir respuestas XML y JSON (como en un servicio RESTful) y, por supuesto, también para recibir y devolver mensajes SOAP. Puede pensar en ello como una capa por debajo de los servicios web . Los servlets tienen su propio estándar, que actualmente es Java Servlet Specification Versión 4.0
Un enfoque más completo y práctico es escribir un servicio web con un marco y publicarlo en un servidor de aplicaciones o contenedor de servlets como Tomcat o JBoss. En este caso, usaría un Servlet para manejar el transporte de las solicitudes HTTP que transmiten sus mensajes SOAP o REST.
Para escribir un servicio web con tecnología servlet, puede utilizar, por ejemplo, JAX-WS (por ejemplo, para SOAP). Para escribir servicios RESTful, puede usar JAX-RS (con la implementación de referencia siendo Jersey ), o alternativamente puede usar Spring WebMVC , pero hasta donde yo sé, ese no es el propósito principal de este marco y Jersey es considerablemente más fácil de usar.
Con respecto a la segunda pregunta: la @Controller
anotación es una anotación de estereotipo específica de Spring que le dice a Spring algo sobre lo que se supone que debe hacer su bean. Lo que devolverá exactamente un método de un controlador depende de la implementación real de sus métodos, puede configurar Spring para que devuelva texto sin formato, HTML, JSON, XML, datos binarios o lo que quiera.
Una nota al lado, una clase que está anotada @Controller
todavía no es un servlet, es simplemente un bean. La forma de utilizar los servlets depende principalmente del Framework que utilice. Por ejemplo, cuando usa Spring, el trabajo del servlet lo realiza Springs, DispatcherServlet
que a su vez reenvía las solicitudes a los beans correctos. Si usa Tomcat, puede escribir directamente sus propios servlets simplemente subclasificando la javax.servlet.http.HttpServlet
clase y sobrescribiendo los métodos necesarios, como el doGet
que responde a las solicitudes HTTP GET de su navegador.