¿Cuál es la diferencia entre estos 2? Encontré pocos resultados en google, nada concluyente.
Aquí hay una pregunta de seguimiento:
Digamos que creo la aplicación web spring mvc, anoto un par de clases con la anotación @Controller y creo algo que transferirá con éxito cierta información desde el front-end -> back-end y viceversa y tal vez alguna base de datos podría estar involucrada en el back-end.
¿Cómo llamarías a eso? ¿Descansar servicio web o servlet o algo más?
java
web-services
spring
rest
terminology
Gandalf StormCrow
fuente
fuente
Respuestas:
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
dejavax.jws
, y luego lanzarlo desde unmain
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 lajavax.servlet.http.HttpServlet
clase y sobrescribiendo los métodos necesarios, como eldoGet
que responde a las solicitudes HTTP GET de su navegador.fuente
Lo que está describiendo es una aplicación web , donde un humano usa un navegador para interactuar con un sistema de software.
Un servicio web es una forma de que los sistemas de software se comuniquen entre sí mediante HTTP y XML o JSON, sin la participación de seres humanos.
Un servlet es una forma específica de Java de escribir software que responde a las solicitudes HTTP. Spring MVC abstrae muchos de los detalles de implementación para facilitar la escritura de aplicaciones web, pero usa servlets debajo de las cubiertas.
fuente
Mi opinión sería que Web Service define una abstracción de nivel superior, como algunas funciones específicas de la empresa. Si bien Servlet es solo un componente de implementación de software responsable del transporte de datos.
La implementación del servicio web normalmente dependería del servlet para recibir datos. Sin embargo, también puede usar su capa personalizada para tratar con datos de protocolo.
@Controller probablemente esté más relacionado con el servicio web que con el servlet, que es, nuevamente, una forma de implementar el transporte.
fuente
@Controller
es parte del marco Spring Web MVC (es la C), por lo que definitivamente no es una cosa de servicio web, pero tampoco está estrechamente relacionado con los servlets.La diferencia más obvia entre Servlet y Web Service es: Usted accede al servlet a través de HTTP mientras accede al Web Service a través de SOAP (Protocolo simple de acceso a objetos). Pero, de hecho, no puede invocar directamente un servlet, solo puede abrir una conexión URL y poner algún parámetro en el servlet si la persona que llama está fuera de su aplicación. Y no puede restringir qué parámetros puede poner la persona que llama. La persona que llama tampoco sabe qué parámetros puede recibir su servlet. Por lo tanto, es mejor que use el servicio web para proporcionar API a otras aplicaciones, el archivo WSDL de su servicio web puede proporcionar a la persona que llama suficiente información para invocar su servicio web.
fuente
Un servlet es un controlador de consultas HTTP. Puede hacer lo que quiera con sus consultas entrantes. Un servlet que se ejecuta en la JVM.
Un servicio web está ligado a un protocolo más o menos rígido: una interfaz (API) se define con los métodos disponibles y sus argumentos y valores de retorno para el servicio.
Esta interfaz se expone mediante los mecanismos del protocolo. Estos protocolos son independientes del host que ejecutará el servicio: puede definir el mismo servicio web utilizando PHP, Java, C # o su propio lenguaje. Solo necesita tener un fragmento de código capaz de comprender las consultas del protocolo y de producir respuestas legibles por el cliente.
Por ejemplo, SOAP es un protocolo de servicio web: definición de Wikipedia:
fuente
Los servicios web operan a un nivel más alto que los servlets. Los servlets son API que son simples y brindan capacidades para escribir componentes del lado del servidor.
Por ejemplo, RESTfull es un servicio web que contiene muchas otras "funciones" junto con el servlet. Para implementar, podemos definir el web.xml como -
<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>
que no es más que un servlet
fuente
El servicio web usa la clase ServletContainer, que nuevamente es una clase Servlet, que maneja la solicitud de manera limpia y estructurada. REST son las siglas de REpresentational STateless Protocol. Aquí la solicitud no almacenará ningún dato.
El servicio web REST admite métodos HTTP
Podemos asignar cualquier número de URL a la clase de servicio web que puede tener cualquier tipo de métodos HTTP.
Por otro lado, solo se puede realizar una asignación de URL para cada servlet. Aunque el requisito final se puede lograr con la ayuda de las condiciones del parámetro de solicitud, el uso de servlet hoy en día no proporcionará una forma limpia.
En el servicio web podemos definir la ruta URL a nivel de clase así como a nivel de método , lo que nos permite codificar de forma más estructurada.
fuente