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
de javax.jws
e, em seguida, iniciá-la a partir de um main
mé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 @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 Springs DispatcherServlet
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 da javax.servlet.http.HttpServlet
classe e sobrescrevendo os métodos necessários, como doGet
responder a solicitações HTTP GET de seu navegador.