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 anotar con los @WebService
y @WebMethod
anotaciones de javax.jws
, y luego lanzarlo desde un -method main
con:
Endpoint.publish("http://localhost:8089/myservice", new MyWebService());
El resultado es que se puede ver el WSDL en la URL registrada y si tiene SoapUI o cualquier otro cliente SOAP también puede probar y usar su servicio web.
A servlet por otra parte se utiliza para transportar HTTP solicitudes y resonses. Se puede utilizar 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 considerarlo como una capa debajo de los servicios web. Los servlets tienen su propio estándar que es actualmente el Java Servlet Specification Version 3.1
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 de servlet puede, por ejemplo, usar JAX-WS (por ejemplo, para SOAP). Para escribir servicios RESTful, puede usar JAX-RS (con la implementación de referencia es Jersey), o alternativamente puede usar Spring WebMVC, pero afaik ese no es el propósito principal de este marco y Jersey es considerablemente más fácil de usar.
En cuanto a la segunda pregunta: La anotación @Controller
es un estereotipo anotación específica primavera que le dice algo acerca de la primavera lo que se supone que su grano de hacer. Lo que devolverá exactamente un método de un controlador depende de la implementación real de sus métodos, puede configurar Spring para devolver texto sin formato, HTML, JSON, XML, datos binarios o lo que quiera.
Una nota al costado, una clase que está anotada con @Controller
aún no es un servlet, simplemente es un bean. La forma de usar los servlets depende principalmente del Framework que use. Por ejemplo, cuando utiliza Spring, el trabajo de servlet se realiza mediante 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 clase javax.servlet.http.HttpServlet
y sobrescribiendo los métodos necesarios, como doGet
, que responde a las solicitudes HTTP GET de su navegador.
Un consejo: si no sabes qué es un servlet, es probable que tengas problemas con spring mvc (con anotaciones). Una solución más simple (valet servlet + jdbc) probablemente lo ayude a aprender los conceptos básicos más rápido. – biziclop
Si un servlet tiene solo un comportamiento significativo y ese servlet se asigna a una URL explícita, no veo ninguna razón por la cual (1) los parámetros GET o POST no se pudieron enviar al servlet (2) La respuesta del servlet podría ser devolver una carga de XML con un conjunto de tipos MIME apropiado (3) que esto no es equivalente a un servicio web en el sentido académico? – 8bitjunkie
@GandalfStormCrow Con servlet, los datos reales que se pasan no son datos sino un documento html. El documento html es más apropiado para solicitudes como 1) * obtener el documento * 2) * mostrar el documento *, de persona a persona. Pero, la necesidad era la comunicación entre aplicaciones de una manera independiente de la máquina. Por lo tanto, el servicio web habla sobre la transferencia de datos de datos utilizando xml en lugar de http. – overexchange