2011-05-08 17 views
74

¿Cuál es la diferencia entre estos 2? Encontré pocos resultados en google nada concluyentes.Diferencia entre servlet y servicio web

Aquí es una pregunta de seguimiento:

Di creo primavera aplicación web MVC anotar par de clases con @Controller anotación y crear algo que va a transferir con éxito alguna información de front-end -> volver extremo y viceversa, y quizás alguna base de datos podría estar involucrada en el lado de la parte de atrás.

¿Cómo llamarías eso? ¿Descansa servicio web o servlet o algo más?

+6

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

+1

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

+0

@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

Respuesta

10

Mi opinión sería que el servicio web define la abstracción de nivel superior, como algunas funcionalidades específicas del negocio. Mientras que Servlet es solo un componente de implementación de software responsable del transporte de datos.

La implementación del servicio web normalmente se basaría en el servlet para recibir datos. Sin embargo, también puede usar su capa personalizada de tratamiento de datos de protocolo.

@Controller está probablemente más relacionado con el servicio web que el servlet, que es, de nuevo, una forma de implementar el transporte.

+1

'@ Controller' es parte del framework Spring Web MVC (es la C), por lo que definitivamente no es un servicio web, pero tampoco está estrechamente relacionado con los servlets. – biziclop

+0

Acepto, @Controller no es de ninguna manera un servicio web en sí mismo. Pero personalmente tiendo a usar @Controller a menudo como un punto final para los servicios REST. Sospecho que es un uso menos popular de Spring MVC. –

34

Lo que está describiendo es una aplicación web , donde un ser humano utiliza un navegador para interactuar con un sistema de software.

A servicio web es una forma de que los sistemas de software se comuniquen entre sí mediante HTTP y XML o JSON, sin que intervengan personas.

A servlet es una forma específica de Java de escribir software que responde a las solicitudes HTTP. Spring MVC abstrae mucho de los detalles de implementación para facilitar la escritura de aplicaciones web, pero utiliza servlets bajo las cubiertas.

+0

Corto, y dulce, y correcto. – lux

+0

El estilo de programación de la aplicación web también se puede utilizar para que los sistemas de software se comuniquen entre sí, pero supongo que no es una forma estructurada de programación, y no es el estándar utilizado en la industria de TI. –

2

Un servlet es un manejador de consultas HTTP. Puede hacer lo que quiera con sus consultas entrantes. Un servlet se ejecuta en la JVM.

Un servicio web está vinculado 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 utilizando los mecanismos de protocolo. Estos protocolos son independientes del host que ejecutará el servicio: puede definir el mismo servicio web usando PHP, Java, C# o su propio idioma. Solo necesita tener un fragmento de código capaz de comprender las consultas del protocolo y poder generar respuestas legibles por el cliente.

Por ejemplo SOAP es un protocolo de servicios web: definición de Wikipedia:

SOAP, definido originalmente como simple Object Access Protocol, es una especificación de protocolo para el intercambio de información estructurada en el implementación de Web Servicios en redes de computadoras .

72

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.

+2

"REST o SOAP como su protocolo" ... ¡¡¡pero REST no es un protocolo !! –

+2

Hablando en serio, no, es un paradigma de programación. He corregido mi formulación para reflejar eso. – lanoxx

+0

@lanoxx El objetivo de un * servicio web * es ayudar a integrar una aplicación empresarial con otra fácilmente, suponiendo que esas aplicaciones sean nuevas, necesitan comunicarse entre ellas. [Integración de aplicaciones empresariales] (https://en.wikipedia.org/wiki/Enterprise_application_integration). – overexchange

2

Los servicios web funcionan en un nivel superior que los servlets. Los servlets son API que es simple y proporciona capacidades para escribir componentes del lado del servidor.

Por ejemplo RESTfull es un servicio web que contiene muchas otras "funcionalidades" junto con servlet. Para implementar, podemos definir la web.xml -

<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 sino un servlet

2

La diferencia más obvia entre Servlets y servicio Web es: Se accede servlet a través de HTTP, mientras que el servicio de acceso Web a través de SOAP (Simple Object Protocolo de acceso). Pero, de hecho, no puede invocar directamente un servlet, solo puede abrir la conexión URL y poner algún parámetro al 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 utilizar el servicio web para proporcionar API a otras aplicaciones, el archivo WSDL de su servicio web puede dar a la persona que llama la información suficiente para llamar al su servicio web.

2

El servicio web utiliza la clase ServletContainer, que una vez más es una clase Servlet, que maneja la solicitud de forma limpia y estructurada. El REST significa REpresentational STateless Protocol. Aquí la solicitud no almacenará ningún dato.

El servicio Web REST soporta métodos HTTP

  1. GET - Por lo general, para obtener los datos.
  2. POST - Para insertar un objeto nuevo.
  3. PUT - Para actualizar el objeto existente.
  4. ELIMINAR -Para eliminar el objeto.

Podemos asignar cualquier número de URL a la clase de servicio web que puede tener cualquier tipo de método HTTP.

Por otro lado, solo puede haber 1 asignación de URL para cada servlet. Aunque el requisito final se puede lograr con la ayuda de las condiciones de parámetro de solicitud, pero el uso de servlet en la actualidad no proporcionará una manera limpia.

En servicio web podemos definir ruta URL a nivel de Clase , así como nivel Método, lo que nos permite código en forma más estructurada.

Cuestiones relacionadas