ポートレットの開発について

ポートレットの開発は、JSR 168 に定義された仕様に基づいて、実装します。ポートレットで使用する API も JSR 168 で定義されています。基本的にはサーブレットと同じですが、ポートレットは独自のライフサイクルを持つため、その点において、サーブレットの開発スタイルとは異なります。

ポートレットでは、JSF や Struts などのウェブアプリケーションのフレームワークも利用可能です。ウェブフレームワークを利用することで、ポートレット固有のライフサイクルを気にすることなく、サーブレットと同様の開発環境を実現することができます。ですので、ポートレット固有の学習コストなどを削減することができます。ウェブフレームワークの中でも、JSF では、仕様の中にポートレットに関しても記述しているので、サーブレットとポートレットの違いをフレームワークで吸収して、利用しやすいものになっています。ウェブフレームワークを利用せずに、ポートレット API を用いて、ポートレットを開発する場合は、以下の節のライフサイクルなどを理解する必要があります。

ライフサイクルについて

サーブレットでは、1回のリクエストで呼ばれるメソッドは同一ですが (たとえば、doGet や doPost など)、ポートレットでは、アクションの処理と描画の処理が明確にわかれています。それぞれ呼ばれるメソッドは、Portlet インタフェースの processAction メソッドと render メソッドです。これは、ポータルのページ上に複数のポートレットが存在していたときに、アクションが呼ばれるポートレットは1つであり、アクションが呼ばれないポートレットでは、描画処理だけを行うためです。

アクションの処理について

アクションの処理は、processAction メソッド内で行われます。processAction の引数として、ActionRequest と ActionResponse のインスタンスが渡されます。これらのリクエストとレスポンスは、アクション処理だけに使われます。描画処理に情報を渡したい場合は、ActionResponse#setRenderParameter(String, String) を利用します。

描画の処理について

描画の処理は、render メソッド内で行われます。GenericPortlet クラスでは、各描画用に、表示モード時に呼ばれる doView メソッド、編集モード時に呼ばれる doEdit メソッドなどが実装されているので、render メソッドの代わりに利用することができます。これらの描画メソッドの引数として、RenderRequest と RenderResponse のインスタンスが渡されます。これらのリクエストとレスポンスは、描画処理だけに使われます。