Differenza tra servlet e web service


88

Qual è la differenza tra questi 2? Ho trovato pochi risultati su google niente di conclusivo.

Ecco una domanda successiva:

Supponiamo che crei un'app Web Spring mvc per annotare un paio di classi con l'annotazione @Controller e creare qualcosa che trasferirà con successo alcune informazioni dal front-end -> back-end e viceversa e forse alcuni database potrebbero essere coinvolti sul lato back-end.

Come lo chiameresti? Resto servizio web o servlet o qualcos'altro?


6
Un consiglio: se non sai cos'è un servlet, è probabile che tu abbia problemi con spring mvc (con annotazioni). Una soluzione più semplice (vanilla servlet + jdbc) probabilmente ti aiuterà ad apprendere le basi più velocemente.
biziclop

1
Se un servlet ha un solo comportamento significativo e quel servlet è mappato a un URL esplicito, non vedo alcun motivo per cui (1) i parametri GET o POST non possano essere inviati al servlet (2) La risposta del servlet potrebbe essere di restituire un carico di XML con un appropriato tipo MIME impostato (3) che questo non equivale a un servizio Web in senso accademico?
8bitjunkie

@GandalfStormCrow Con servlet i dati effettivi che vengono passati non sono dati ma un documento html. Il documento html è più appropriato per richieste come 1) ottenere il documento 2) visualizzare il documento , da umano a computer. Ma la necessità era la comunicazione app-app in modo indipendente dalla macchina. Quindi, il servizio web parla del trasferimento dei dati utilizzando xml su http.
scambio eccessivo

Risposte:


90

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 @WebServicee @WebMethodda javax.jws, quindi avviarla da un mainmetodo 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' @Controllerannotazione è 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 @Controllernon è 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 DispatcherServletche a sua volta inoltra le richieste ai bean corretti. Se usi Tomcat, puoi scrivere direttamente i tuoi servlet semplicemente sottoclassando la javax.servlet.http.HttpServletclasse e sovrascrivendo i metodi necessari come quello doGetche risponde alle richieste HTTP GET dal tuo browser.


3
"o REST o SOAP come protocollo" ... Ma REST non è un protocollo !!
Non è un bug

3
In parole povere non lo è, è un paradigma di programmazione. Ho corretto la mia formulazione per riflettere questo.
lanoxx

@lanoxx L'obiettivo di un servizio Web è aiutare a integrare facilmente un'applicazione aziendale con un'altra, supponendo che queste nuove applicazioni debbano parlare tra loro. Integrazione di applicazioni aziendali .
scambio eccessivo

Il collegamento sopra la specifica Java Servlet (ora 4.0) è morto, ora può essere trovato su una nuova home page / github su javaee.github.io/servlet-spec/DOWNLOADS.html
Manohar Reddy Poreddy

43

Quello che stai descrivendo è un'applicazione web , in cui un essere umano utilizza un browser per interagire con un sistema software.

Un servizio Web è un modo per i sistemi software di comunicare tra loro utilizzando HTTP e XML o JSON, senza alcun coinvolgimento umano.

Un servlet è un modo specifico per Java di scrivere software che risponde alle richieste HTTP. Spring MVC astrae molti dettagli di implementazione per rendere più semplice la scrittura di applicazioni web, ma usa i servlet dietro le quinte.


Lo stile di programmazione dell'applicazione Web può essere utilizzato anche per i sistemi software per comunicare tra loro, ma presumo che non sia un modo strutturato di programmazione e non sia lo standard utilizzato nel settore IT.
Mohamed Iqzas

10

La mia opinione è che il servizio Web definisce l'astrazione di livello superiore come alcune funzionalità specifiche del business. Mentre Servlet è solo un componente di implementazione software responsabile del trasporto dei dati.

L'implementazione del servizio Web normalmente si basa sul servlet per la ricezione dei dati. Tuttavia, può anche utilizzare il suo livello personalizzato per gestire i dati del protocollo.

@Controller è probabilmente più correlato al servizio Web che al servlet che è, ancora una volta, un modo per implementare il trasporto.


1
@Controllerfa parte del framework Spring Web MVC (è il C), quindi non è sicuramente una cosa del servizio web, ma non è nemmeno strettamente correlato ai servlet.
biziclop

Sono d'accordo, @Controller non è in alcun modo un servizio web di per sé. Ma personalmente tendo a usare spesso @Controller come punto finale per i servizi REST. Sospetto che sia un utilizzo meno popolare di Spring MVC.
Alex Gitelman

3

La differenza più evidente tra Servlet e Web Service è: si accede al servlet tramite HTTP mentre si accede al Web Service tramite SOAP (Simple Object Access Protocol). Ma, in effetti, non puoi invocare direttamente un servlet, puoi solo aprire la connessione URL e mettere qualche parametro al servlet se il chiamante è fuori dalla tua applicazione. E non puoi limitare i parametri che il chiamante può inserire. Il chiamante non sa nemmeno quali parametri può ricevere il tuo servlet. Quindi, faresti meglio a utilizzare il servizio web per fornire API ad altre applicazioni, il file WSDL del tuo servizio web può fornire al chiamante informazioni sufficienti per richiamare il tuo servizio web.


2

Un servlet è un gestore di query HTTP. Puoi fare quello che vuoi con le tue domande in arrivo. Un servlet eseguito sulla JVM.

Un servizio web è legato a un protocollo più o meno rigido: viene definita un'interfaccia (API) con i metodi disponibili e i loro argomenti e valori di ritorno per il servizio.

Questa interfaccia viene esposta utilizzando i meccanismi del protocollo. Questi protocolli sono indipendenti dall'host che eseguirà il servizio: è possibile definire lo stesso servizio Web utilizzando PHP, Java, C # o il proprio linguaggio. Hai solo bisogno di un pezzo di codice in grado di comprendere le query per il protocollo e in grado di produrre risposte leggibili dal client.

Ad esempio SOAP è un protocollo di servizio web: definizione di Wikipedia:

SOAP, originariamente definito come Simple Object Access Protocol, è una specifica di protocollo per lo scambio di informazioni strutturate nell'implementazione dei servizi Web nelle reti di computer.


2

I servizi Web operano a un livello superiore rispetto ai servlet. I servlet sono API che sono semplici e forniscono funzionalità per scrivere componenti lato server.

Ad esempio RESTfull è un servizio Web che contiene molte altre "funzionalità" insieme a servlet. Per distribuire, possiamo definire web.xml come -

<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>

che non è altro che un servlet


2

Web Service utilizza la classe ServletContainer che è di nuovo una classe Servlet, che gestisce la richiesta in modo pulito e strutturato. Il REST sta per REpresentational STateless Protocol. Qui la richiesta non memorizzerà alcun dato.

Il servizio Web REST supporta i metodi HTTP

  1. GET - Solitamente per recuperare i dati.
  2. POST - Per inserire un nuovo oggetto.
  3. PUT - Per aggiornare l'oggetto esistente.
  4. DELETE -Per eliminare l'oggetto.

Possiamo mappare qualsiasi numero di URL alla classe del servizio Web che può avere qualsiasi tipo di metodi HTTP.

D'altra parte, può essere eseguita solo 1 mappatura URL per ogni servlet. Sebbene il requisito finale possa essere raggiunto con l'aiuto delle condizioni dei parametri di richiesta, l'uso di servlet al giorno d'oggi non fornisce un modo pulito.

Nel webservice possiamo definire il percorso dell'URL a livello di classe così come a livello di metodo , che ci consente di codificare in modo più strutturato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.