Diferença entre servlet e serviço web

88

Qual é a diferença entre esses 2? Encontrei poucos resultados no google nada conclusivo.

Aqui está uma pergunta de acompanhamento:

Digamos que eu crie o aplicativo da web spring mvc para anotar algumas classes com a anotação @Controller e crie algo que irá transferir com sucesso algumas informações do front end -> back end e vice-versa e talvez algum banco de dados possa estar envolvido no back end.

Como você chamaria isso? Resto serviço web ou servlet ou algo mais?

Gandalf StormCrow
fonte
6
Um conselho: se você não sabe o que é um servlet, é provável que tenha dificuldades com o spring mvc (com anotações). Uma solução mais simples (vanilla servlet + jdbc) provavelmente ajudará você a aprender o básico mais rápido.
biziclop
1
Se um servlet tem apenas um comportamento significativo e esse servlet é mapeado para uma URL explícita, não vejo razão para que (1) os parâmetros GET ou POST não pudessem ser enviados para o servlet (2) A resposta do servlet poderia ser retornar uma carga de XML com um conjunto de tipo MIME apropriado (3) que isso não é equivalente a um serviço da Web no sentido acadêmico?
8bitjunkie
@GandalfStormCrow Com o servlet, os dados reais que estão sendo passados ​​não são dados, mas um documento html. documento html é mais apropriado para solicitações como 1) obter o documento 2) exibir o documento , de uma pessoa para o computador. Mas, a necessidade era a comunicação app-app de forma independente da máquina. Assim, o serviço da web fala sobre transferência de dados usando xml sobre http.
overexchange

Respostas:

90

Um serviço da web é um serviço que fornece métodos de serviço para seus clientes usando o paradigma de programação REST ou o protocolo SOAP para comunicação. Existem várias maneiras de implementar um serviço da web. A maneira mais simples de escrever um serviço da web seria escrever uma classe e anotá-la com as anotações @WebServicee @WebMethodde javax.jwse, em seguida, iniciá-la a partir de um mainmétodo com:

Endpoint.publish("http://localhost:8089/myservice", new MyWebService());

O resultado é que você pode visualizar o WSDL na URL registrada e, se tiver SoapUI ou qualquer outro cliente SOAP, também pode testar e usar seu serviço da web.

Um servlet, por outro lado, é usado para transportar solicitações e respostas HTTP . Ele pode ser usado para escrever um aplicativo da web com JSPs e HTML ou para servir respostas XML e JSON (como em um serviço RESTful) e, claro, também para receber e retornar mensagens SOAP. Você pode pensar nisso como uma camada abaixo dos serviços da web . Os servlets têm seu próprio padrão, que atualmente é o Java Servlet Specification Versão 4.0

Uma abordagem mais abrangente e prática é escrever um serviço da web com uma estrutura e publicá-lo em um servidor de aplicativos ou contêiner de servlet, como Tomcat ou JBoss. Nesse caso, você usaria um Servlet para lidar com o transporte das solicitações HTTP que transmitem suas mensagens SOAP ou REST.

Para escrever um serviço da web com tecnologia de servlet, você pode, por exemplo, usar JAX-WS (por exemplo, para SOAP). Para escrever serviços RESTful, você pode usar JAX-RS (com a implementação de referência sendo Jersey ) ou, alternativamente, você pode usar Spring WebMVC , mas, pelo que eu sei, esse não é o objetivo principal desta estrutura e Jersey é consideravelmente mais fácil de usar.

Com relação à segunda questão: A @Controlleranotação é uma anotação de estereótipo específico do Spring que diz ao Spring algo sobre o que seu bean deve fazer. O que exatamente um método de um controlador retornará depende da implementação real de seus métodos, você pode configurar o Spring para retornar texto simples, HTML, JSON, XML, dados binários ou o que quiser.

Uma nota ao lado, uma classe que é anotada @Controllerainda não é um servlet, é simplesmente um bean. Como você usa servlets depende principalmente da estrutura que você usa. Por exemplo, quando você usa Spring, o trabalho de servlet é feito por Springs DispatcherServletque, por sua vez, encaminha as solicitações para os beans corretos. Se você usar o Tomcat, poderá escrever diretamente seus próprios servlets simplesmente criando uma subclasse da javax.servlet.http.HttpServletclasse e sobrescrevendo os métodos necessários, como doGetresponder a solicitações HTTP GET de seu navegador.

lanoxx
fonte
3
"REST ou SOAP como protocolo" ... Mas REST não é um protocolo !!
Não é um bug de
3
Falando fortemente, não é um paradigma de programação. Eu corrigi minha formulação para refletir isso.
lanoxx
@lanoxx Goal of a serviço da Web é ajudar a integrar um aplicativo corporativo com outro facilmente, supondo que esses aplicativos novos precisam se comunicar entre si. Integração de aplicativos corporativos .
overexchange
O link de especificação Java Servlet acima (agora 4.0) está morto, agora pode ser encontrado em uma nova home page / github em javaee.github.io/servlet-spec/DOWNLOADS.html
Manohar Reddy Poreddy
43

O que você está descrevendo é um aplicativo da web , onde um ser humano usa um navegador para interagir com um sistema de software.

Um serviço da web é uma forma de os sistemas de software se comunicarem entre si usando HTTP e XML ou JSON, sem envolvimento de pessoas.

Um servlet é uma maneira específica de Java de escrever software que responde a solicitações HTTP. O Spring MVC abstrai muitos detalhes de implementação para tornar a escrita de aplicativos da web mais fácil, mas usa servlets nos bastidores.

Artbristol
fonte
O estilo de programação de aplicativo da web também pode ser usado para que sistemas de software se comuniquem entre si, mas presumo que não seja uma forma estruturada de programação e não seja o padrão usado na indústria de TI.
Mohamed Iqzas
10

Minha opinião seria que o Web Service define abstração de nível superior, como algumas funcionalidades específicas de negócios. Enquanto o Servlet é apenas um componente de implementação de software responsável pelo transporte de dados.

A implementação do Web Service normalmente depende do servlet para receber dados. No entanto, ele também pode usar sua camada personalizada para lidar com dados de protocolo.

@Controller provavelmente está mais relacionado ao serviço da Web do que ao servlet, que é, novamente, uma forma de implementar o transporte.

Alex Gitelman
fonte
1
@Controllerfaz parte da estrutura Spring Web MVC (é o C), portanto, definitivamente não é um serviço da web, mas também não está intimamente relacionado a servlets.
biziclop
Eu concordo, @Controller não é de forma alguma um serviço da web por si só. Mas, pessoalmente, tendo a usar @Controller frequentemente como um ponto final para serviços REST. Suspeito que seja um uso menos popular do Spring MVC.
Alex Gitelman
3

A diferença mais óbvia entre Servlet e Web Service é: Você acessa o servlet via HTTP enquanto acessa o Web Service via SOAP (Simple Object Access Protocol). Mas, na verdade, você não pode invocar diretamente um servlet, você só pode abrir uma conexão de URL e colocar algum parâmetro no servlet se o chamador estiver fora de seu aplicativo. E você não pode restringir quais parâmetros o chamador pode colocar. O chamador também não sabe quais parâmetros seu servlet pode receber. Portanto, é melhor você usar o serviço da web para fornecer API para outros aplicativos, o arquivo WSDL do seu serviço da web pode fornecer ao chamador informações suficientes para invocar seu serviço da web.

Chinni
fonte
2

Um servlet é um manipulador de consulta HTTP. Você pode fazer o que quiser com as consultas recebidas. Um servlet executado na JVM.

Um serviço da web está vinculado a um protocolo mais ou menos rígido: uma interface (API) é definida com os métodos disponíveis e seus argumentos e valores de retorno para o serviço.

Esta interface é exposta usando os mecanismos de protocolo. Esses protocolos são agnósticos sobre o host que executará o serviço: você pode definir o mesmo serviço da web usando PHP, Java, C # ou sua própria linguagem. Você só precisa ter um trecho de código capaz de entender as consultas para o protocolo e produzir respostas legíveis pelo cliente.

Por exemplo, SOAP é um protocolo de serviço da web: definição da Wikipedia:

SOAP, originalmente definido como Simple Object Access Protocol, é uma especificação de protocolo para troca de informações estruturadas na implementação de Web Services em redes de computadores.

Guillaume
fonte
2

Os serviços da Web operam em um nível superior aos servlets. Os servlets são APIs simples e fornecem recursos para escrever componentes do lado do servidor.

Por exemplo, RESTfull é um serviço da Web que contém muitas outras "funcionalidades" junto com o servlet. Para implantar, podemos definir o 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 nada mais é do que um servlet

dgm
fonte
2

O Web Service usa a classe ServletContainer, que é novamente uma classe Servlet, que trata a solicitação de maneira limpa e estruturada. O REST é a sigla para REpresentational STateless Protocol. Aqui, a solicitação não armazenará nenhum dado.

O serviço da Web REST oferece suporte a métodos HTTP

  1. GET - Normalmente para buscar dados.
  2. POST - Para inserir um novo objeto.
  3. PUT - Para atualizar o objeto existente.
  4. DELETE -Para excluir o objeto.

Podemos mapear qualquer número de URLs para a classe de serviço da Web que pode ter qualquer tipo de método HTTP.

Por outro lado, pode haver apenas 1 mapeamento de URL para cada servlet. Embora o requisito final possa ser alcançado com a ajuda das condições do parâmetro de solicitação, o uso de servlet hoje em dia não oferece uma maneira limpa.

No webservice, podemos definir o caminho da URL no nível da classe , bem como no nível do método , o que nos permite codificar de forma mais estruturada.

Kranti123
fonte