この課題を始める前に、『課題 1.4: デプロイメント記述子相違の比較』を完了していなければなりません。
この課題では、2 つのポートレット API 間の JSP ファイル・コーディングに関する相違を学習します。 JSP ファイルの編集および表示の 2 つのバージョンを調べます。 以下の検討項目は基本的な相違点です。
IBM ポートレット API タグは portlet.tld
タグ・ライブラリーに宣言されます。このタグは portletAPI 接頭部を使用します。 JSR 168 ポートレット API は
std-portlet.tld
タグ・ライブラリーと portlet 接頭部を使用します。
fmt.tld
に定義された JavaServer Pages 標準タグのようなその他のタグ・ライブラリー (JSTL) も使用できます。下のサンプル・コードに示されるように、JSTL タグ・ライブラリーは fmt 接頭部を使用します。
<%@ taglib uri="/WEB-INF/tld/portlet.tld" prefix="portletAPI" %>
<portletAPI:init />
<%@ taglib prefix="fmt" uri="/WEB-INF/tld/fmt.tld" %>
<fmt:setBundle basename="nls.Text" />
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
<portlet:defineObjects />
<%@ taglib prefix="fmt" uri="/WEB-INF/tld/fmt.tld" %>
<fmt:setBundle basename="nls.Text"/>
IBM ポートレット API では、<portletAPI:init> タグが PortletRequest、PortletResponse、 および PortletConfig オブジェクトを JSP ファイルで使用可能にします。 JSR 168 ポートレット API では、<portlet:defineObjects> タグが、 RenderRequest、RenderResponse、および PortletConfig オブジェクトを JSP ファイルで使用可能にします。
<portletAPI:init />
<portlet:defineObjects />
2 つの API は、レンダリング応答に MIME タイプを設定する方法で違いがあります。 IBM ポートレットは JSP ファイルのページ・ディレクティブで MIME タイプを宣言します。 JSR 168 ポートレットはレンダリング・メソッド (doView(), doEdit()) にある RenderResponse オブジェクトの setContentType() メソッドを使用して、MIME タイプを宣言します。
<%@ page contentType="text/html"
import="java.util.*,
com.ibm.etools.portal.portletexamples.bookmark.legacy.*,
org.apache.jetspeed.portlet.*"
session="false"%>
response.setContentType("text/html");
ポートレット、ポートレット・ページ、またはポートレット・リソースへの参照は、 ポートレット URI (JSR 168 で使用する語句は URL ) にエンコードされます。 IBM ポートレット API は、現行モードの呼び出しポートレットを指す createURI を、そして直前モードの呼び出しポートレットを指す createReturnURI を使用します。 JSR 168 ポートレット API では、アクション・フェーズ (actionURL)、 およびレンダリング・フェーズ (renderURL) 用に URL を作成します。
JSP ファイルの場合: <portletAPI:createURI/>
<portletAPI:createReturnURI/>
Java クラスの場合: PortletResponse.createURI()
PortletResponse.createReturnURI()
JSP ファイルの場合: <portlet:actionURL/>
<portlet:renderURL/>
Java クラスの場合: RenderResponse.createActionURL()
RenderResponse.createRenderURL()
ポートレット JSP ファイルには、関連 WAR ファイルにあるリソース (画像、アプレット、およびその他の JSP ファイル) を参照するための URL をエンコードする必要があります。 JSR 168 ポートレット API でも、コンテキスト・パスを URL に含めることが必要です。
<%= response.encodeURL("images/photo01.jpg") %>
<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/photo01.jpg") %>
Java クラスと JSP ファイルの両方に関するネームスペース・エンコードについては、 課題 1.3 の『ネームスペース・エンコード』で検討済みです。
両方の API のサンプル・コードで JSTL タグの <fmt:setBundle> の使用について示されています。このタグはこのサンプルの JavaSource/nls
ディレクトリーにある Java リソース・バンドルの
Text.properties
を参照します。
このタグと「ポートレットを定義するリソース・バンドル」を比較してください。
<fmt:setBundle basename="nls.Text" />
<fmt:setBundle basename="nls.Text" />
これで、『課題 1.6: 使用する API の決定』を開始する準備が完了しました。