課題 1.5: JSP ファイルのコーディング相違の比較

この課題を始める前に、『課題 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 接頭部を使用します。

IBM ポートレット API
<%@ 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" />

JSR 168 ポートレット API
<%@ 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"/>

オブジェクトを JSP ファイルで使用可能にする

IBM ポートレット API では、<portletAPI:init> タグが PortletRequest、PortletResponse、 および PortletConfig オブジェクトを JSP ファイルで使用可能にします。 JSR 168 ポートレット API では、<portlet:defineObjects> タグが、 RenderRequest、RenderResponse、および PortletConfig オブジェクトを JSP ファイルで使用可能にします。

IBM ポートレット API
<portletAPI:init />
JSR 168 ポートレット API
<portlet:defineObjects />

Mime タイプ宣言

2 つの API は、レンダリング応答に MIME タイプを設定する方法で違いがあります。 IBM ポートレットは JSP ファイルのページ・ディレクティブで MIME タイプを宣言します。 JSR 168 ポートレットはレンダリング・メソッド (doView(), doEdit()) にある RenderResponse オブジェクトの setContentType() メソッドを使用して、MIME タイプを宣言します。

IBM ポートレット API
<%@ page contentType="text/html"
         import="java.util.*,
                 com.ibm.etools.portal.portletexamples.bookmark.legacy.*,
                 org.apache.jetspeed.portlet.*"
         session="false"%>
JSR 168 ポートレット API
response.setContentType("text/html");

ポートレット参照

ポートレット、ポートレット・ページ、またはポートレット・リソースへの参照は、 ポートレット URI (JSR 168 で使用する語句は URL ) にエンコードされます。 IBM ポートレット API は、現行モードの呼び出しポートレットを指す createURI を、 そして直前モードの呼び出しポートレットを指す createReturnURI を使用します。 JSR 168 ポートレット API では、アクション・フェーズ (actionURL)、 およびレンダリング・フェーズ (renderURL) 用に URL を作成します。

IBM ポートレット API
JSP ファイルの場合:   <portletAPI:createURI/>
                 <portletAPI:createReturnURI/>
Java クラスの場合: PortletResponse.createURI()
                 PortletResponse.createReturnURI()
JSR 168 ポートレット API
JSP ファイルの場合:   <portlet:actionURL/>
                 <portlet:renderURL/>
Java クラスの場合: RenderResponse.createActionURL()
                 RenderResponse.createRenderURL()

URL エンコード

ポートレット JSP ファイルには、関連 WAR ファイルにあるリソース (画像、アプレット、およびその他の JSP ファイル) を参照するための URL をエンコードする必要があります。 JSR 168 ポートレット API でも、コンテキスト・パスを URL に含めることが必要です。

IBM ポートレット API
<%= response.encodeURL("images/photo01.jpg") %>
JSR 168 ポートレット API
<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/images/photo01.jpg") %>

ネームスペース・エンコード

Java クラスと JSP ファイルの両方に関するネームスペース・エンコードについては、 課題 1.3 の『ネームスペース・エンコード』で検討済みです。

リソース・バンドル

両方の API のサンプル・コードで JSTL タグの <fmt:setBundle> の使用について示されています。 このタグはこのサンプルの JavaSource/nls ディレクトリーにある Java リソース・バンドルの Text.properties を参照します。 このタグと「ポートレットを定義するリソース・バンドル」を比較してください。

IBM ポートレット API
<fmt:setBundle basename="nls.Text" />
JSR 168 ポートレット API
<fmt:setBundle basename="nls.Text" />

これで、『課題1.6: 使用する API の決定』を開始する準備が完了しました。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.