Un servizio Web è un servizio che fornisce metodi di servizio ai propri client utilizzando il paradigma di programmazione REST o il protocollo SOAP per la comunicazione. Esistono diversi modi per implementare un servizio Web. Il modo più semplice per scrivere un servizio web sarebbe scrivere una classe e annotarla con le annotazioni @WebService
e @WebMethod
da javax.jws
, quindi avviarla da un main
metodo con:
Endpoint.publish("http://localhost:8089/myservice", new MyWebService());
Il risultato è che puoi visualizzare il WSDL all'URL registrato e se hai SoapUI o qualsiasi altro client SOAP puoi anche testare e utilizzare il tuo servizio web.
Un servlet d'altra parte viene utilizzato per trasportare richieste e risposte HTTP . Può essere utilizzato per scrivere un'applicazione web con JSP e HTML, o per servire risposte XML e JSON (come in un servizio RESTful) e, naturalmente, anche per ricevere e restituire messaggi SOAP. Puoi pensarlo come uno strato sotto i servizi web . I servlet hanno il proprio standard che attualmente è Java Servlet Specification versione 4.0
Un approccio più completo e pratico consiste nello scrivere un servizio Web con un framework e pubblicarlo su un server delle applicazioni o un contenitore servlet come Tomcat o JBoss. In questo caso useresti un Servlet per gestire il trasporto delle richieste HTTP che trasmettono i tuoi messaggi SOAP o REST.
Per scrivere un servizio web con tecnologia servlet è possibile ad esempio utilizzare JAX-WS (es. Per SOAP). Per scrivere servizi RESTful, puoi usare JAX-RS (con l'implementazione di riferimento che è Jersey ), o in alternativa puoi usare Spring WebMVC , ma per quanto ne so questo non è lo scopo principale di questo framework e Jersey lo è considerevolmente più facile da usare.
Riguardo alla seconda domanda: l' @Controller
annotazione è un'annotazione stereotipo specifica di Spring che dice a Spring qualcosa su ciò che il tuo bean dovrebbe fare. Ciò che esattamente un metodo di un controller restituirà dipende dall'effettiva implementazione dei tuoi metodi, puoi configurare Spring per restituire testo normale, HTML, JSON, XML, dati binari o qualsiasi cosa tu voglia.
Una nota a lato, una classe annotata con @Controller
non è ancora un servlet, è semplicemente un bean. Il modo in cui usi i servlet dipende principalmente dal Framework che usi. Ad esempio, quando si utilizza Spring, il lavoro servlet viene eseguito da Springs DispatcherServlet
che a sua volta inoltra le richieste ai bean corretti. Se usi Tomcat, puoi scrivere direttamente i tuoi servlet semplicemente sottoclassando la javax.servlet.http.HttpServlet
classe e sovrascrivendo i metodi necessari come quello doGet
che risponde alle richieste HTTP GET dal tuo browser.