qual è la differenza tra un portlet e un servlet?


96

Mi viene chiesto di lavorare su portlet e portali.

Voglio conoscere la differenza tra un portlet e un servlet?

Come / dove differisce un portlet (può essere funzionalmente) da un servlet?

Risposte:


65

I portlet fanno parte dello standard JSR-168 che regola i contenitori e i componenti del portale. Questo è uno standard diverso dagli standard per i contenitori Web (e i servlet). Sebbene ci siano sicuramente forti paralleli tra questi due standard, differiscono in contenitori, API, ciclo di vita, configurazione, distribuzione, ecc.

La differenza principale tra portlet e servlet potrebbe essere che mentre il servlet risponde sempre a un singolo tipo di azione: richiesta , il portlet (a causa della natura del suo ciclo di vita e dei collegamenti del contenitore più forti) deve rispondere a due tipi di azioni: rendering e richiesta . Ce ne sono ovviamente di più, ma ho scoperto che questa è la differenza principale tra i due quando ho studiato lo sviluppo del portale.


1
Aggiornamento: Portlet 1 è JSR 168 , Portlet 2 è JSR 286 e Portlet 3 è JSR 362 .
Basil Bourque

137

Migliorato dall'origine : servlet vs portlet

Analogie

  1. Servlet e Portlet sono componenti basati sul web che utilizzano Java per la loro implementazione.

  2. I portlet sono gestiti da un contenitore portlet proprio come il servlet è gestito dal contenitore servlet.

  3. Sia il contenuto statico che quello dinamico possono essere generati da portlet e servlet.

  4. Il ciclo di vita di portlet e servlet è controllato dal contenitore

  5. Il modello client / server viene utilizzato sia per i servlet che per i portlet

  6. La confezione e la distribuzione sono essenzialmente le stesse, WAR / EAR.

  7. La sessione dell'applicazione esiste sia nei contenitori Servlet che Portlet. È uno dei modi di condividere i dati (comunicazione tra portlet grezza) dalla fase di rendering alla fase di azione (o qualsiasi fase inferiore) nei contenitori del portlet.

  8. Sia i servlet che i portlet utilizzano ambienti server / VM simili che lo supportano. Tuttavia, potrebbero essere necessarie alcune configurazioni aggiuntive in caso di portlet per farlo funzionare correttamente

  9. Gli strumenti build / DI sono simili per entrambi: Ant, Maven, Gradle, ecc.Sono tutti supportati. Principalmente :) - Questo è cambiato un po 'con Liferay 7.


Differenze

  1. I servlet possono eseguire il rendering di pagine Web complete, mentre i portlet rendono i frammenti html. Questi frammenti vengono aggregati dal portale in una pagina web completa.

  2. Il tipo di contenuto dei portlet JSR 168 può essere solo cHTML, XHTML, WML. Non supporta altri tipi di contenuto.

  3. I portlet non sono autorizzati a generare codice HTML contenente tag come body, frame, frameset, head, html o title.

  4. Un portlet, a differenza di un servlet, non ha un URL allegato, quindi non è possibile accedervi direttamente. L'accesso è solo tramite la pagina del portale che contiene il portlet.

  5. I portlet possono essere forniti di controlli per manipolare gli stati della finestra o le modalità del portlet.

  6. È possibile posizionare più istanze di un singolo portlet sulla stessa pagina.

  7. I portlet supportano configurazione e personalizzazione persistenti, informazioni sul profilo.

  8. I portlet possono avere due tipi di richiesta, vale a dire. richiesta di rendering e richiesta di azione.

  9. I portlet hanno due ambiti all'interno della sessione; ambito dell'applicazione per la comunicazione tra portlet e ambito del portlet per la comunicazione intra portlet.

  10. Portlet non può impostare la codifica del set di caratteri della risposta né può impostare le intestazioni della risposta HTTP.

  11. I portlet non hanno accesso per richiedere l'URL. Quindi non può accedere ai parametri di query aggiunti all'URL. I portlet non possono impostare i cookie.

  12. Metodi tipici di Portlet API sono doView(), doEdit(), doHelp()e processAction()mentre quelli di servlet sono service(), doPost(), doGet().

  13. Specifiche servlet - JSR 369 (servlet 4.0), JSR 340 (servlet 3.1), JSR 315 (servlet 3.0), JSR 154 (servlet 2.5 e 2.4). Specifiche portlet - JSR 168 (Portlet Spec v1.0), JSR 286 (Portlet Spec v2.0), JSR 362 (Portlet Spec v3.0)

  14. La distribuzione dei portlet prevede un approccio diverso rispetto a un'applicazione servlet. Alcuni Provider (Liferay / Alfresco / WebSphere) supportano la distribuzione a caldo dei portlet senza la necessità di riavviare il server, cosa che non è possibile in caso di servlet senza modularizzare l'applicazione utilizzando librerie speciali come OSGi.


Modifica (dai commenti)

Un contenitore Portlet è costruito su un contenitore Servlet. Quindi in definitiva si può dire che il portlet viene eseguito su un contenitore servlet. Ma durante lo sviluppo delle app, visualizziamo un contenitore portlet separatamente dal contenitore Servlet / Java EE.


Quindi, un'applicazione del portale viene eseguita in un contenitore servlet / JEE e comunica separatamente con un contenitore portlet? La macchina del client (browser) non è a conoscenza del contenitore o dei portlet del portlet come da me interpretato, a parte l'aspetto sulla pagina che viene gestito tramite JavaScript e gli aggiornamenti parziali della pagina.
Andy

2
Un contenitore Portlet è costruito su un contenitore Servlet. Si può dire che un contenitore Portlet è un contenitore Servlet avanzato con molte "funzionalità". Ma per rispondere alla tua domanda senza mezzi termini, sì. Durante lo sviluppo delle app, visualizziamo un contenitore portlet separatamente dal contenitore Servlet / JEE.
Ashok Goli

4
Il modo più semplice per pensare a ciò è che un servlet esegue il rendering di un'intera pagina Web e un portlet esegue il rendering di una parte rettangolare specifica (sottosezione) di una pagina Web. Ad esempio, la barra pubblicitaria sul lato destro di una pagina di notizie potrebbe essere rappresentata come un portlet. Ma non implementeresti un singolo campo di modifica come portlet, perché è troppo granulare. Fondamentalmente, se si scompone una pagina Web nelle sue principali aree di sezione, quelle sono buoni candidati da trasformare in portlet.

@ClayFerguson "un portlet esegue il rendering di una parte rettangolare specifica (sottosezione) di una pagina web", quindi è come un frame, o un <div> ...
Tom Brito

@TomBrito - In parte vero. È come un frame o un div, che hanno i propri cicli di vita e possono condividere dati con altri frame o div.
Ashok Goli

8

Sia i portlet che i servlet ricevono una richiesta http e restituiscono una risposta, che di solito è un codice HTML che può essere visualizzato da un browser. Un portlet viene utilizzato nel contesto di un "portale", l'idea è che una singola pagina vista dall'utente ha molte parti, si pensi ai riquadri, ciascuna proveniente da un portlet diverso.

Ora, puoi ottenere quell'effetto "affiancato" dai normali servet (vedi Struts + Tiles per un esempio di come) il bit extra dai portlet è che i portlet si trovano in un ambiente più ricco fornito dal portale, vengono fornite API extra in modo che ciò che viene visualizzato da qualsiasi portlet può essere configurato dai singoli utenti in base alle loro preferenze e i portlet possono comunicare tra loro: premere un pulsante in uno, succede qualcosa in un altro.


6

I servlet hanno una definizione java (applicazioni che gestiscono richieste HTTP GET / POST), mentre i portlet hanno una definizione dell'interfaccia utente. Un componente che esegue una funzione specifica simile ai widget di Windows Vista o molti componenti utilizzati in StackOverflow qui. Non devono essere necessariamente supportati da servlet sul lato server. Ma lo standard Portlet è stato sviluppato insieme a java. O'Reilly ha un bel tutorial .


4

Essenzialmente, i servlet forniscono contenuto che normalmente occupa l'intera pagina in un browser (a meno che non si stia utilizzando frame) e i portlet forniscono contenuto che è avvolto da una finestra. Con i portlet, è possibile avere più portlet uno accanto all'altro e ognuno può fornire contenuto e funzionalità diversi dall'altro. Un portlet può fornire l'interazione completa per un tipo di applicazione, mentre un altro portlet può fornire il contenuto per un altro tipo di applicazione. Il portale può fornire alcune funzionalità di mantenimento della casa e un unico punto di accesso protetto a tutti i portlet su una pagina. Per quanto riguarda i dettagli (somiglianze / differenze) tra di loro, continua a leggere. Ecco alcune somiglianze:

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.