Risposte:
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.
Migliorato dall'origine : servlet vs portlet
Analogie
Servlet e Portlet sono componenti basati sul web che utilizzano Java per la loro implementazione.
I portlet sono gestiti da un contenitore portlet proprio come il servlet è gestito dal contenitore servlet.
Sia il contenuto statico che quello dinamico possono essere generati da portlet e servlet.
Il ciclo di vita di portlet e servlet è controllato dal contenitore
Il modello client / server viene utilizzato sia per i servlet che per i portlet
La confezione e la distribuzione sono essenzialmente le stesse, WAR / EAR.
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.
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
Gli strumenti build / DI sono simili per entrambi: Ant, Maven, Gradle, ecc.Sono tutti supportati. Principalmente :) - Questo è cambiato un po 'con Liferay 7.
Differenze
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.
Il tipo di contenuto dei portlet JSR 168 può essere solo cHTML, XHTML, WML. Non supporta altri tipi di contenuto.
I portlet non sono autorizzati a generare codice HTML contenente tag come body, frame, frameset, head, html o title.
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.
I portlet possono essere forniti di controlli per manipolare gli stati della finestra o le modalità del portlet.
È possibile posizionare più istanze di un singolo portlet sulla stessa pagina.
I portlet supportano configurazione e personalizzazione persistenti, informazioni sul profilo.
I portlet possono avere due tipi di richiesta, vale a dire. richiesta di rendering e richiesta di azione.
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.
Portlet non può impostare la codifica del set di caratteri della risposta né può impostare le intestazioni della risposta HTTP.
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.
Metodi tipici di Portlet API sono
doView()
,doEdit()
,doHelp()
eprocessAction()
mentre quelli di servlet sonoservice()
,doPost()
,doGet()
.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)
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.
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.
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 .
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: