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?
java
web-services
spring
rest
terminology
Gandalf StormCrow
fonte
fonte
Respostas:
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
@WebService
e@WebMethod
dejavax.jws
e, em seguida, iniciá-la a partir de ummain
método com: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
@Controller
anotaçã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
@Controller
ainda 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 SpringsDispatcherServlet
que, 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 dajavax.servlet.http.HttpServlet
classe e sobrescrevendo os métodos necessários, comodoGet
responder a solicitações HTTP GET de seu navegador.fonte
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.
fonte
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.
fonte
@Controller
faz 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.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.
fonte
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:
fonte
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 -
que nada mais é do que um servlet
fonte
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
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.
fonte