Was ist der Unterschied zwischen einem Portlet und einem Servlet?

96

Ich werde gebeten, an Portlets und Portalen zu arbeiten.

Ich möchte den Unterschied zwischen einem Portlet und einem Servlet kennen.

Wie / wo unterscheidet sich ein Portlet (möglicherweise funktional) von einem Servlet?

Rajesh
quelle

Antworten:

65

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.

Spitzenkoch
quelle
1
Update: Portlets 1 ist JSR 168 , Portlets 2 ist JSR 286 und Portlet 3 ist JSR 362 .
Basil Bourque
137

Erweitert von Quelle : Servlets gegen Portlets

Ähnlichkeiten

  1. Servlets und Portlets sind webbasierte Komponenten, deren Implementierung Java verwendet.

  2. Portlets werden von einem Portlet-Container verwaltet, genau wie Servlets von Servlet-Containern verwaltet werden.

  3. Sowohl statische als auch dynamische Inhalte können von Portlets und Servlets generiert werden.

  4. Der Lebenszyklus von Portlets und Servlets wird vom Container gesteuert

  5. Das Client / Server-Modell wird sowohl für Servlets als auch für Portlets verwendet

  6. Die Verpackung und Bereitstellung sind im Wesentlichen gleich, WAR / EARs.

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

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

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

  1. Servlets können vollständige Webseiten rendern, während Portlets HTML-Fragmente rendern. Diese Fragmente werden vom Portal zu einer vollständigen Webseite zusammengefasst.

  2. Der Inhaltstyp von JSR 168-Portlets kann nur cHTML, XHTML, WML sein. Andere Inhaltstypen werden nicht unterstützt.

  3. Portlets dürfen keinen HTML-Code generieren, der Tags wie body, frame, frameet, head, html oder title enthält.

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

  5. Portlets können mit Steuerelementen versehen werden, um ihre Fensterzustände oder Portlet-Modi zu ändern.

  6. Mehrere Instanzen eines einzelnen Portlets können auf derselben Seite platziert werden.

  7. Portlets unterstützen die permanente Konfiguration und Anpassung sowie Profilinformationen.

  8. Portlets können zwei Arten von Anforderungen haben, nämlich Renderanforderung und Aktionsanforderung.

  9. Portlets haben innerhalb der Sitzung zwei Bereiche. Anwendungsbereich für die Kommunikation zwischen Portlets und Portlet-Bereich für die Intra-Portlet-Kommunikation.

  10. Portlet kann weder die Zeichensatzcodierung der Antwort noch die HTTP-Antwortheader festlegen.

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

  12. Typische Methoden der Portlet - API sind doView(), doEdit(), doHelp()und processAction()während die von Servlets sind service(), doPost(), doGet().

  13. 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)

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

Ashok Goli
quelle
Eine Portalanwendung wird also in einem Servlet / JEE-Container ausgeführt und kommuniziert separat mit einem Portlet-Container? Der Computer des Clients (Browser) kennt den Portlet-Container oder die Portlets nicht so, wie ich es verstehe. Außer dem Erscheinungsbild auf der Seite, das über JavaScript und teilweise Seitenaktualisierungen verarbeitet wird.
Andy
2
Ein Portlet-Container basiert auf einem Servlet-Container. Sie können sagen, dass ein Portlet-Container ein erweiterter Servlet-Container mit vielen "Funktionen" ist. Aber um Ihre Frage unverblümt zu beantworten, ja. Während der Entwicklung von Apps wird ein Portlet-Container getrennt vom Servlet / JEE-Container angezeigt.
Ashok Goli
4
Der einfachste Weg, dies zu verstehen, besteht darin, dass ein Servlet eine gesamte Webseite und ein Portlet einen bestimmten rechteckigen Teil (Unterabschnitt) einer Webseite rendert. Beispielsweise könnte die Werbeliste auf der rechten Seite einer Nachrichtenseite als Portlet gerendert werden. Sie würden jedoch kein einzelnes Bearbeitungsfeld als Portlet implementieren, da dies zu detailliert ist. Wenn Sie eine Webseite in ihre Hauptabschnittsbereiche unterteilen, sind dies im Grunde gute Kandidaten, um sie in Portlets umzuwandeln.
@ClayFerguson "Ein Portlet rendert einen bestimmten rechteckigen Teil (Unterabschnitt) einer Webseite", also wie ein Frame oder ein <div> ...
Tom Brito
@ TomBrito - Teilweise wahr. Es ist wie ein Frame oder ein Div, die ihre eigenen Lebenszyklen haben und Daten mit anderen Frames oder Divs teilen können.
Ashok Goli
8

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.

djna
quelle
6

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 .

Whatnick
quelle
4

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:

Liyakath
quelle