Antworten:
Portlets sind Teil des JSR-168-Standards, der Portalcontainer und -komponenten regelt. Dies unterscheidet sich von den Standards für Webcontainer (und Servlets). Obwohl es definitiv starke Parallelen zwischen diesen beiden Standards gibt, unterscheiden sie sich in Containern, APIs, Lebenszyklus, Konfiguration, Bereitstellung usw.
Der Hauptunterschied zwischen Portlet und Servlet könnte darin bestehen, dass das Servlet zwar immer auf eine einzelne Art von Aktion reagiert - Anforderung , das Portlet (aufgrund der Art seines Lebenszyklus und der stärkeren Containerbindung) jedoch auf zwei Arten von Aktionen reagieren muss: Rendern und Anfordern . Es steckt natürlich noch mehr dahinter, aber ich fand dies als den Hauptunterschied zwischen den beiden, als ich die Portalentwicklung studierte.
Erweitert von Quelle : Servlets gegen Portlets
Ähnlichkeiten
Servlets und Portlets sind webbasierte Komponenten, deren Implementierung Java verwendet.
Portlets werden von einem Portlet-Container verwaltet, genau wie Servlets von Servlet-Containern verwaltet werden.
Sowohl statische als auch dynamische Inhalte können von Portlets und Servlets generiert werden.
Der Lebenszyklus von Portlets und Servlets wird vom Container gesteuert
Das Client / Server-Modell wird sowohl für Servlets als auch für Portlets verwendet
Die Verpackung und Bereitstellung sind im Wesentlichen gleich, WAR / EARs.
Die Anwendungssitzung ist sowohl in Servlet- als auch in Portlet-Containern vorhanden. Dies ist eine der Möglichkeiten, Daten (rohe Inter-Portlet-Kommunikation) von der Renderphase bis zur Aktionsphase (oder einer beliebigen unteren Phase) in den Portlet-Containern auszutauschen.
Sowohl Servlets als auch Portlets verwenden ähnliche Server- / VM-Umgebungen, die dies unterstützen. Bei Portlets sind möglicherweise einige zusätzliche Konfigurationen erforderlich, damit sie ankreuzen
Die Build / DI-Tools sind für beide ähnlich - Ant, Maven, Gradle usw. werden unterstützt. Meistens :) - Dies hat sich mit Liferay 7 etwas geändert.
Unähnlichkeiten
Servlets können vollständige Webseiten rendern, während Portlets HTML-Fragmente rendern. Diese Fragmente werden vom Portal zu einer vollständigen Webseite zusammengefasst.
Der Inhaltstyp von JSR 168-Portlets kann nur cHTML, XHTML, WML sein. Andere Inhaltstypen werden nicht unterstützt.
Portlets dürfen keinen HTML-Code generieren, der Tags wie body, frame, frameet, head, html oder title enthält.
Im Gegensatz zu einem Servlet ist an ein Portlet keine URL angehängt, sodass nicht direkt darauf zugegriffen werden kann. Der Zugriff erfolgt nur über die Portalseite, auf der sich das Portlet befindet.
Portlets können mit Steuerelementen versehen werden, um ihre Fensterzustände oder Portlet-Modi zu ändern.
Mehrere Instanzen eines einzelnen Portlets können auf derselben Seite platziert werden.
Portlets unterstützen die permanente Konfiguration und Anpassung sowie Profilinformationen.
Portlets können zwei Arten von Anforderungen haben, nämlich Renderanforderung und Aktionsanforderung.
Portlets haben innerhalb der Sitzung zwei Bereiche. Anwendungsbereich für die Kommunikation zwischen Portlets und Portlet-Bereich für die Intra-Portlet-Kommunikation.
Portlet kann weder die Zeichensatzcodierung der Antwort noch die HTTP-Antwortheader festlegen.
Portlets haben keinen Zugriff auf die Anforderungs-URL. Daher kann nicht auf die an die URL angehängten Abfrageparameter zugegriffen werden. Portlets können keine Cookies setzen.
Typische Methoden der Portlet - API sind
doView()
,doEdit()
,doHelp()
undprocessAction()
während die von Servlets sindservice()
,doPost()
,doGet()
.Servlet-Spezifikationen - JSR 369 (Servlet 4.0), JSR 340 (Servlet 3.1), JSR 315 (Servlet 3.0), JSR 154 (Servlet 2.5 und 2.4). Portlet-Spezifikationen - JSR 168 ( Portlet-Spezifikation v1.0), JSR 286 ( Portlet-Spezifikation v2.0), JSR 362 (Portlet-Spezifikation v3.0)
Die Bereitstellung von Portlets erfolgt anders als bei einer Servlet-Anwendung. Einige Anbieter (Liferay / Alfresco / WebSphere) unterstützen die Hot-Bereitstellung von Portlets, ohne dass der Server neu gestartet werden muss. Dies ist bei Servlets nicht möglich, ohne die Anwendung mithilfe spezieller Bibliotheken wie OSGi zu modularisieren.
Bearbeiten (Aus Kommentaren)
Ein Portlet-Container basiert auf einem Servlet-Container. Letztendlich kann man also sagen, dass das Portlet auf einem Servlet-Container ausgeführt wird. Bei der Entwicklung von Apps wird jedoch ein Portlet-Container getrennt vom Servlet / Java EE-Container angezeigt.
Sowohl Portlets als auch Servlets empfangen eine http-Anfrage und geben eine Antwort zurück. Dies ist normalerweise HTML, das von einem Browser gerendert werden kann. Ein Portlet wird im Kontext eines "Portals" verwendet. Die Idee ist, dass eine einzelne Seite, die vom Benutzer gesehen wird, viele Teile enthält, Denkkacheln, die jeweils von einem anderen Portlet stammen.
Jetzt können Sie diesen "gekachelten" Effekt von normalen Servets erhalten (siehe Struts + Tiles für ein Beispiel, wie). Das zusätzliche Bit der Portlets besteht darin, dass sich die Portlets in einer vom Portal bereitgestellten umfangreicheren Umgebung befinden. Zusätzliche APIs werden bereitgestellt, damit Was von einem Portlet angezeigt wird, kann von einzelnen Benutzern nach ihren Wünschen konfiguriert werden, und die Porlets können miteinander kommunizieren - drücken Sie eine Taste in einer, etwas passiert in einer anderen.
Servlets haben eine Java-Definition (Anwendungen, die HTTP-GET / POST-Anforderungen verarbeiten), während Portlets eine Benutzeroberflächendefinition haben. Eine Komponente, die eine bestimmte Funktion ausführt, die den Windows Vista-Widgets ähnelt, oder viele Komponenten, die hier im Stackoverflow verwendet werden. Sie müssen nicht unbedingt von Servlets auf der Serverseite unterstützt werden. Der Portlet-Standard wurde jedoch zusammen mit Java entwickelt. O'Reilly hat ein schönes Tutorial .
Im Wesentlichen stellen Servlets Inhalte bereit, die normalerweise die gesamte Seite in einem Browser einnehmen (es sei denn, Sie verwenden Frames), und Portlets stellen Inhalte bereit, die von einem Fenster umschlossen werden. Mit Portlets können Sie mehrere Portlets nebeneinander haben und jedes kann Inhalte und Funktionen bereitstellen, die sich vom anderen unterscheiden. Ein Portlet kann die vollständige Interaktion für einen Anwendungstyp bereitstellen, während ein anderes Portlet Inhalt für einen anderen Anwendungstyp bereitstellen kann. Das Portal bietet einige Haushaltsfunktionen und einen sicheren Zugangspunkt zu allen Portlets auf einer Seite. Was die Einzelheiten (Ähnlichkeiten / Unterschiede) zwischen ihnen betrifft, lesen Sie bitte weiter. Hier sind einige Ähnlichkeiten: