サーブレットが文書の出力を配信するのに対して、ポートレットはフラグメントの出力のみを配信します。
ただし、FileServingServlet サーブレットに類似した PortletServingServlet サーブレットを使用して、ポートレットをサーブレットのように処理することができます。
このタスクについて
デフォルトの文書 Servlet フィルターの DefaultFilter フィルターが PortletServingServlet サーブレットに適用され、文書内のポートレットのコンテンツが戻されます。
このフィルターは要求のみに適用され、RequestDispatcher メソッドを使用した組み込みや転送には適用されません。
ポートレットのコンテンツを文書内に埋め込むために使用される Servlet フィルターは、文書 Servlet フィルターと呼ばれます。
追加の文書 Servlet フィルターを .xml ファイル内に定義できます。
com.ibm.wsspi.portletcontainer.util 内の FilterRequestHelper 属性は、文書 Servlet フィルターによるフィルター・チェーンおよびポートレット情報に関する要求の分析を支援するために提供されています。
これは、文書 Servlet フィルターのリダイレクトのマーカーとして、文書変換が 1 回実行されるようにするために、サポート対象の動的ポートレット・タイトル内で使用されます。
手順
- 新規文書 Servlet フィルターを追加します。 フィルター機能はサーバーのフィーチャーであるため、サーバーのフィルター機能を使用するためには、すべてのフィルターをサーバーにインストールする必要があります。
これらのフィルターは、サーバー・レベルのすべてのクラスおよびライブラリー・ディレクトリーで使用可能になっている必要があります。
また、フィルターを Java™ archive (JAR) ファイルのルート内の plugin.xml ファイルに登録する必要もあります。
次に、plugin.xml ファイル内にフィルターを登録する方法の例を示します。
<?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>
- オプション: 動的タイトルを要求属性として提供することにより、動的ポートレット・タイトルを設定します。 PortletServingServlet サーブレットは、動的タイトルを要求属性 FilterRequestHelper.DYNAMIC_TITLE として提供することにより、動的ポートレット・タイトルをサポートします。
この属性がポートレットで設定されている場合は動的ポートレット・タイトルが戻されますが、それ以外の場合は、portlet.xml ファイルの静的ポートレット・タイトル (定義されている場合) が戻されます。
DYNAMIC_TITLE = ‘javax.portlet.title'
DefaultFilter は、フラグメントを文書に変換する際に、この要求属性を使用して文書タイトルを設定します。
フィルターでブラウザーのキャッシュや動的ポートレット・タイトルのサポートが必要な場合は、ポートレット・コンテンツ全体をキャッシュする必要があります。
- ポートレット・レンダリング呼び出しに対してキャッシュ処理を指定し、動的タイトルをサポートします。文書 Servlet フィルターのリダイレクト
文書 Servlet フィルターは、要求属性 FilterRequestHelper.REDIRECT としてマーカーを設定できます。
このマーカーにより、レンダリング呼び出しに先立ってポートレット・アクションが呼び出された後に、ポートレット・コンテナーが文書 Servlet フィルターに確実に戻るようになります。
定数 REDIRECT = ‘com.ibm.websphere.portlet.action' および REDIRECT_VALUE = 'redirect' を定義する必要があります。DefaultFilter は、この要求属性を使用してポートレット・レンダリング呼び出しに対して特別なキャッシュ処理を提供し、動的タイトルをサポートします。
- ポートレットのフラグメントを有効な文書に変換します。 文書変換は、1 回だけで完了する必要があります。そのため、各文書 Servlet フィルターは、フラグメントが前に文書に変換されていないことを確認する必要があります。
文書 Servlet フィルターがフラグメントを文書に変換する場合は、要求属性 FilterRequestHelper.DOCUMENT が FilterRequestHelper.DOCUMENT_VALUE に設定されている必要があります。
この要求属性は、変換の実行が必要かどうかをマークします。
定数 DOCUMENT = ‘com.ibm.websphere.portlet.filter' および DOCUMENT_VALUE = 'document' が定義されています。
DefaultFilter は、この要求属性を使用して、フラグメントを Hypertext Markup Language (HTML) 文書に変換する必要があるかどうかを確認します。
例えば、先に別の文書 Servlet フィルターがフラグメントを有効な Wireless Markup Language (WML) 文書に代わりに変換することを許可します。