Ein Portlet stellt nur Fragmente bereit, wohingegen ein Servlet gewöhnlich Dokumente ausgibt.
Mit dem Servlet PortletServingServlet, das dem
Servlet FileServingServlet gleicht, können Sie Portlets jedoch wie Servlets adressieren.
Informationen zu diesem Vorgang
Auf das Servlet PortletServingServlet wird ein Standarddokumentservletfilter angewendet, damit der Inhalt des Portlet in einem Dokument zurückgegeben wird.
Dieser Filter gilt nur für Anforderungen, und nicht für Includes oder Forwards, die die Methode
RequestDispatcher verwenden. Ein Servletfilter, der dazu verwendet wird, den Inhalt des Portlet
in ein Dokument einzubetten, wird als Dokumentservletfilter bezeichnet.
Sie können in einer Datei mit der Erweiterung .xml
weitere Dokumentservletfilter definieren. Das in com.ibm.wsspi.portletcontainer.util bereitgestellte Attribut
"FilterRequestHelper" hilft den Dokumentservletfiltern bei der Analyse einer Anforderung in Bezug auf Filterketten
und Portletinformationen.
Es wird für die Unterstützung dynamischer Portlettitel als Kennzeichnung für die Umleitung
für Dokumentservletfilter verwendet.
Außerdem stellt es sicher, dass die Dokumentkonvertierung einmal durchgeführt wird.
Vorgehensweise
- Fügen Sie einen neuen Dokumentservletfilter hinzu. Die Filterfunktion ist ein Server-Feature.
Deshalb müssen alle Filter
im Server installiert werden, damit die Filterfunktion des Servers verwendet werden kann.
Die Filter müssen in allen Klassen und im Bibliotheksverzeichnis auf Serverebene verfügbar sein.
Außerdem müssen Sie den Filter in einer Datei plugin.xml im Stammverzeichnis einer JAR-Datei registrieren.
Das folgende Beispiel zeigt, wie der Filter in einer Datei
plugin.xml registriert wird.
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin id="sample.plugin" name="Customer_Plugin" provider-name="Customer" version="1.0.0">
<extension point="com.ibm.ws.portletcontainer.portlet-document-filter-config">
<portlet-document-filter class-name="sample.filter.CustomFilter" order="200" />
</extension>
</plugin>
- Optional: Definieren Sie die dynamischen Titel für Portlets, indem Sie
den dynamischen Titel als Anforderungsattribut angeben. Das Servlet "PortletServingServlet"
unterstützt dynamische Portlettitel, indem es den dynamischen Titel als Anforderungsattribut
(FilterRequestHelper.DYNAMIC_TITLE) bereitstellt. Dieses Attribut gibt den dynamischen Portlettitel zurück,
wenn es vom Portlet gesetzt wurde. Andernfalls wird der statische Portlettitel der Datei
portlet.xml, sofern definiert, zurückgegeben.
DYNAMIC_TITLE = ‘javax.portlet.title'
DefaultFilter
verwendet dieses Anforderungsattribut, um den Dokumenttitel zu setzen, während das Fragment in ein Dokument konvertiert wird.
Wenn der Filter Browser-Caching oder dynamische Portlet-Titel unterstützen soll, müssen Sie den vollständigen
Portletinhalt zwischenspeichern.
- Legen Sie die Cachehandhabung fest, damit der Aufruf für die Portletwiedergabe dynamische Titel unterstützt. Umleitung für Dokumentservletfilter.
Ein
Dokumentservletfilter kann eine Markierung als Anforderungsattribut "FilterRequestHelper.REDIRECT" setzen.
Diese Markierung stellt sicher, dass der Portletcontainer die Steuerung an den Dokumentservletfilter zurückgibt, nachdem die Portletaktion
vor den Übergabeaktionen aufgerufen wurde.
Sie müssen die folgenden Konstanten definieren:
REDIRECT = ‘com.ibm.websphere.portlet.action' und REDIRECT_VALUE
= 'redirect'. DefaultFilter verwendet dieses Anforderungsattribut zur Unterstützung der
speziellen Cacheverarbeitung für den Portletübergabeaufruf zur Unterstützung dynamischer Titel.
- Konvertieren Sie das Portletfragment in ein gültiges Dokument. Dokumentkonvertierungen dürfen nur einmal ausgeführt werden. Deshalb muss jeder Dokumentservletfilter sicherstellen, dass das Fragment zuvor noch nicht in ein Dokument konvertiert worden ist.
Wenn der Dokumentservletfilter das Fragment in ein Dokument konvertiert, muss das Anforderungsattribut
"FilterRequestHelper.DOCUMENT" auf "FilterRequestHelper.DOCUMENT_VALUE" gesetzt werden.
Dieses Anforderungsattribut gibt Aufschluss darüber, ob die Konvertierung noch durchgeführt werden muss.
Die folgenden Konstanten werden definiert: DOCUMENT
= ‘com.ibm.websphere.portlet.filter' und DOCUMENT_VALUE
= 'document'. DefaultFilter verwendet dieses Anforderungsattribut, um zu prüfen, ob das
Fragment in ein HTML-Dokument (Hypertext Markup Language) konvertiert werden muss.
Damit hat ein anderer Dokumentservletfilter beispielsweise vorab die Möglichkeit, das Fragment in ein gültiges WLM-Dokument zu konvertieren.