Enterprise Tech Tips
2003
2003
   2002
 
 
エンタープライズ Java テクノロジ Tech Tips
2003 年 12 月 22 日

ようこそ、 エンタープライズ Java テクノロジ Tech Tips 2003 年 12 月 22日号へ!

       
「Enterprise Java Technologies Tech Tips」では、J2EE (Java 2 Platform, Enterprise Edition) などのエンタープライズ Java テクノロジと API の活用テクニックを紹介しています。

今号で紹介するテクニックは次のとおりです。

  • J2EE 1.4 プラットフォームの紹介
  • JSTL (JavaServer Pages Standard Tag Library)>


これらのテクニックは Java 2, Enterprise Edition, v 1.4 SDK を使って開発されました。この SDK は http://java.sun.com/j2ee/1.4/download-dr.html からダウンロードできます。

今号の記事は Mark Johnson が執筆しました。同氏は、elucify technical communications の会長であり、『Designing Enterprise Applications with the J2EE Platform, 2nd Edition』の共同執筆者でもあります。また、同氏は活用テクニックの議論の場であるオープンフォーラムを運営しています。
これらのテクニックのサンプルアーカイブをダウンロードできます。このアプリケーションのコンテキストルートは ttdec2003 で、index.html ファイルにサンプルコードの使用法が記載されています。このコードや、この記事に記載している情報の使用には、ライセンス条項が適用されます。


英語版 (原文) は次の Web サイトでご覧いただけます。
http://java.sun.com/jdc/EJTechTips/2003/tt1222.html

このティップのサンプルコードは次の URL からダウンロードできます。 http://java.sun.com/jdc/EJTechTips/download/ttsep2003.ear アプリケーションのコンテキストルートは ttsep2003 です。 index.html welcome ファイルにサンプルコードの使用方法が記述されています。

このコードの利用及び、情報の利用条件は以下のライセンス条項に基づくものとします。 http://developer.java.sun.com/berkeley_license.html



J2EE 1.4 プラットフォームの紹介

2003 年 11 月 24 日、Java Community Process の委員会で J2EE 1.4 が満場一致で承認されました。エンタープライズ Java 用の標準化されたオープンプラットフォーム、J2EE の約 2 年ぶりのメジャーリリースです。この最新リリースには数々の新機能があり、そのすべてを新しく公開された J2EE 1.4 SDK で使用できます。J2EE 1.4 SDK には、J2EE 1.4 Application Server、J2SE (Java 2 Platform, Standard Edition) 1.4.2、および J2EE 1.4 のサンプルコードが含まれています。SDK 全体をダウンロードすることも、Application Server やサンプルコードを個別にダウンロードすることもできます。

この記事では、J2EE 1.4 プラットフォームのいくつかの新機能の概要を紹介します。また、Solaris、Windows、Linux、Mac OS X への J2EE 1.4 SDK のインストール方法についても説明します。この記事では、J2EE 1.4 プラットフォームの新機能をすべて取り上げているわけではありません。新機能についてのより詳しい説明については、『J2EE v1.4 Application Server Release Notes』を参照してください。

Web サービスのサポート


J2EE 1.4 プラットフォームのもっとも重要で、おそらくもっとも待ち望まれていた機能は、標準に基づく Web サービスの包括的なサポートでしょう。J2EE 1.4 プラットフォームでは、Enterprise Bean、サーブレットといった J2EE コンポーネントを、SOAP (Simple Object Access Protocol) over HTTP を使用する Web サービスとして使用できます。

J2EE 1.4 プラットフォームでは、アプリケーションサーバーは WS-I Basic Profile 1.0 (Web サービスのトランスポートとプロトコルの動作を定義した仕様) に従う必要があります。WS-I に従うことで、Web サービスの相互運用性が保証されます。

J2EE での Web サービスの使用は、主に次のテクノロジによって実現されています。

・ Web Services for J2EE 1.1。Web Services for J2EE は、Web サービスを作成するための個々の J2EE テクノロジの組み合わせ方を定めたマスタープランです。クライアント、サービスエンドポイント、およびそれらのコンテナ間の配備規約が定義されています。 新しい配備記述子 webservices.xml によって、これらのコンポーネントの種類ごとに配備スキーマを定義します。Web Services for J2EE では、プログラミングモデル (JAX-RPC)、サービスを提供するオブジェクトの JNDI を使用した検出、およびセキュリティも定義されています。さらに、新しい Handler オブジェクトも提供されています。このオブジェクトを使用すると、SOAP メッセージをインターセプトし、操作することができます。

・ JAX-RPC 1.1 (Java API for XML-Remote Procedure Calls)。JAX-RPC は、XML をメソッド呼び出しや戻り値の直列化プロトコルとして使用する、標準化された RPC (遠隔手続き呼び出し) インタフェースです。JAX-RPC では、SOAP と WSDL (Web Services Description Language) に基づく XML Web サービス用のサービスエンドポイントとしてのサーブレットとステートレスセッション Bean が定義されています。サービスエンドポイントは、Web サービスのロジックを実際に実装したソフトウェアコンポーネントです。JAX-RPC のクライアントインタフェースでは、Web サービスへの遠隔呼び出しがどのように発生し、引数と戻り値 (コレクションを含む) がどのように直列化されるかが定義されています。JAX-RPC 1.1 では、セキュア Web サービス用の SSL に基づく認証もサポートされています。

・ JAXR 1.0 (Java API for XML Registries)。JAXR は、さまざまな種類の XML レジストリを 1 つのモデルに統一します。プログラマはこれらのレジストリを使用して、サービスを発見および検索し、そのコンテンツとメタデータにアクセスします。たとえ ば、アプリケーション構築ツールを使用すると、特定のサーバー上のレジストリにアクセスして、そのサーバーが提供しているサービスを特定し、それらのサー ビスの 1 つを使用する SOAP クライアントを設計できます。JAXR を使用すると、J2EE Web サービスを外部 Web サービスクライアントから使用できるようにもなります。

・ SAAJ 1.2 (SOAP with Attachments API for Java)。SAAJ は、クライアントと Web サービスとの間の MIME アタッチメント付き SOAP メッセージを使用した SOAP メッセージの転送を処理します。MIME アタッチメントを使用すると、文書 (文書ベースの Web サービスの場合) または大量のデータを含んだ引数 (RPC 形式の Web サービスの場合) を送信できます。SAAJ では、アタッチメント付きの SOAP メッセージ用 Document Object モデルも定義されています。これにより、SOAP メッセージの符号化方法のユーザー制御や、反復処理や複雑な処理の自動化フックを実現できます。

・ JAXP 1.2 (Java API for XML Parsing)。このパッケージは、XML のさまざまな構文解析や処理の方法を統一します。構文解析を実行するクラスを配備時や実行時に切り換えることができます。JAXP 1.2 には SAX 2.0、DOM Level 2、および XSLT が含まれています。

Web 層の拡張


J2EE 1.4 プラットフォームの Web 層における拡張のすべてが、Web サービスと関係があるわけではありません。従来の中核テクノロジも更新されています。

J2EE 1.4 プラットフォームの Web 層の大きな注目点は、JSP (JavaServer Pages) テクノロジ、バージョン2.0 の採用です。JSTL (JavaServer Pages Standard Tag Library) によって提供される豊富な汎用タグを使用して、Web 層を簡単に開発できるようになりました。JSTL では新しい式言語も定義されていて、Web 層の JavaBean コンポーネントに格納される、あらゆるスコープの式を記述できます。今月の 2 番目のテクニック (「JSTL ( JavaServer Pages Standard Tag Library)」の節を参照) では、これらのタグの使用法をいくつか説明しています。

JSP ページのもう 1 つの大きな拡張として、カスタムタグを簡単に定義できるようになりました。従来は、カスタムタグを定義するには Tag インタフェースを実装したクラスを記述する必要がありました。JSP 2.0 では、この方式に加えて、カスタムタグを (JSP ファイルの中で) JSP ページの一部として定義し、複数の場所で使用できるようになりました。

Enterprise JavaBeans 2.1


J2EE 1.4 のもう 1 つの重要な機能は EJB 2.1 です。次のようないくつかの新しい拡張が導入されています。

・ ステートレスセッション Bean を Web サービスのエンドポイントとして使用できるようになりました。

・ 設定可能な新しい Timer サービスから、エンタープライズ Bean の ejbTimeout() メソッドが定期的に呼び出されます。このサービスを利用して、ビジネスロジックを定期的に実行できるようになりました。

・ 結果セットを並べ替える ORDER BY 句、新しい集計関数 (AVG、MAX、MIN、SUM、COUNT) などが EJB-QL に追加されました。

・ メッセージ駆動 Bean (MDB) が、(従来のバージョンのような) JMS メッセージだけでなく、あらゆる種類のメッセージを受け取れるようになりました。また、コネクタは、外部システムからのメッセージを MDB 側の呼び出しに変換するアダプタを介して、MDB と直接通信できるようになりました。

J2EE 1.4 プラットフォーム用の Enterprise Java BluePrints


Java BluePrints サンプルアプリケーションは、J2EE プラットフォームに欠かせない要素です。これらのサンプルアプリケーションは、J2EE テクノロジの使用法の実例であり、アプリケーションの設計・開発のベストプラクティスの指針になります。J2EE 1.4 SDK の開発者リリースには、従来の Java Pet Store とワイヤレスゲームのサンプルアプリケーションに加えて、Web サービス用の新しい J2EE サンプルアプリケーション、AdventureBuilder が含まれています。

その他の変更内容


J2EE 1.4 プラットフォームのその他の重要な変更内容は次のとおりです。

・ JACC (Java Authorization Contract for Containers) 1.0: セキュリティおよびロールに基づく権限付与プロバイダの自由な選択を実現

・ Java Deployment API 1.1: 配備ツールをサーバーから分離

・ JMS (Java Message Service) 1.1 の拡張

・ J2EE Connectors 1.5: 非同期、双方向、マルチスレッド型のコネクタのフルサポートなど

・ J2EE Deployment 1.1: (旧バージョンと互換性のある) DTD 形式ではなく、XML スキーマでの配備記述子の定義など

・ J2EE Management 1.0: Java ツールや非 Java ツールからのエンタープライズ資源の管理

・ 新リリースの JavaMail (1.3)、Java Transaction API (JTA バージョン 1.01B)、JDBC 3.0

サーバーのインストール


新しい GUI ベースのインストーラを使用すると、新しいサーバーコードを簡単にインストールできます。対応オペレーティングシステムは次のとおりです。

  • Solaris SPARC 8
  • Solaris SPARC 9
  • Windows 2000 Pro SP3+
  • Windows XP Pro SP1+
  • Windows 2000 Server SP3+
  • Windows Server 2003
  • Linux RedHat 8

Linux については、RedHat だけでなく、その他の多くの Linux ディストリビューションでもそのままで、あるいはほとんど変更を加えずに使用できます。Linux での動作には、Java 2 実行時システム、バージョン 1.4.1 (またはそれ以降) が必要です。

上記の対応オペレーティングシステムにサーバーコードをインストールするには次のようにします。

1. 該当するパッケージをダウンロードします。

2. ダウンロードした実行形式ファイルを実行します。

公式には対応していませんが、J2EE 1.4 SDK は Macintosh OS X または Darwin でも実行できます。OS X または Darwin へのインストールには root 権限が必要です。また、Java 環境 (JRE) のバージョンが 1.4.1 (またはそれ以降) でなければなりません。

J2EE 1.4 SDK を OS X または Darwin にインストールするには次のようにします。

1. http://java.sun.com/j2ee/1.4/download-dr.html から Linux 版のSDK (ELF 形式のファイル) をダウンロードします。

2. unzip コマンド行ユーティリティを使用して、ダウンロードしたアーカイブファイルを空のディレクトリに展開します。必ず unzip ユーティリティを使用する必要があります。StuffIt などのプログラムは使用できません。プロンプト('$') に次のように入力します。

$ unzip j2eesdk-1_4-dr-linux-eval

3. プロンプトに次のように入力し、インストーラを起動します。

$ java -cp package/PackageFormat.jar:. appserv

インストーラが起動し、SDK がインストールされます。必要であれば、インストーラの画面が見えるようにウィンドウの大きさを調節します。

4. Java のインストール先を尋ねるメッセージが表示されます。次のように入力します。

/Library/Java/Home

サーバーには JDK 1.4.2 が必要なことを通知する警告メッセージが表示されます。実際には Java 2 バージョン 1.4.1 でも正しく動作するため、<continue> を選択します。

5. インストールの完了後に、いくつかの追加手順を実行する必要があります。まず、次のように入力し、インストール先の imq/bin ディレクトリの権限を変更します。
  
$ chmod a+x /Users/yourname/SUNWappserver/imq/bin

yourname の部分は自分自身のユーザー名に置き換えます (ここではサーバーを/Users/yourname にインストールした場合を想定しています)。

6. 次の手順を実行するには root ユーザーのアクセス権が必要です。サーバーは /Library/Java/Home/jre/bin から java と javac を検出します。このディレクトリはまだ存在していません。このディレクトリを作成し、java と javac のバイナリへのシンボリックリンクを作成します。そのためには次のように入力します。

$ sudo mkdir -p /Library/Java/Home/jre/bin
$ cd /Library/Java/Home/jre/bin
$ sudo ln -s /Library/Java/Home/bin/java java
$ sudo ln -s /Library/Java/Home/bin/javac javac

sudo プログラムを初めて実行するときに、パスワードの入力が必要です。管理者ではない場合、これらの手順を実行するには root ユーザーとしてログオンし直すか、su コマンドで root ユーザーになる必要があります。

7. これでインストールは完了です。アプリケーションサーバーを起動するには次のように入力します。

 $ cd /Users/yourname/SUNWappserver/bin
$ asadmin start-domain



JSTL (JavaServer Pages Standard Tag Library)


過去数年間にわたって、JSP ページに表示ロジックを実装するには、カスタムタグを記述してきました。そのため、反復処理の実行、XML の処理、補助関数の呼び出し、Web 層の JavaBean へのアクセスを実現する、人気のあるタグライブラリがいくつか開発されました。しかし、これらのライブラリの機能にはかなりの重複があり、しかもお互いに 互換性がありませんでした。

これらの非互換性の問題を解決するため、Java Community Process ではロジックタグと表示タグの共通セットの開発に合意しました。これらのタグは、Web アプリケーションでのビューの作成に広く役立ちます。この新しいタグセットを JSTL (JavaServer Pages Standard Tag Library) といいます。

JSTL は J2EE 1.4 プラットフォームの必須の要素ではなく、アプリケーションサーバーのベンダーには JSTL のサポートは義務付けられていませんが、Sun の J2EE 1.4 SDK には JSTL が含まれており、その他のベンダーもおそらく JSTL をサポートするはずです。JSTL はまったくの新機能ではなく、従来の J2EE 1.3 のコンテナでも JSTL 1.0 を使用できました。JSTL 1.1 メンテナンスリリースは、JSP 2.0 と J2EE 1.4 プラットフォームの新機能を使用できるように JSTL をアップグレードします。

この記事では、新しい JSTL タグのいくつかの使用法を説明します。これらのタグを使用するには、まず JSP の新しい式言語 (EL) を理解する必要があります。

JSP の式言語


JSTL は、JSP ページで書式設定されるデータのほとんどは、JSP ページの状態の中で使用できるという基本的な考え方に基づいています。その状態には次のものが含まれます。

・ ページスコープ、要求スコープ、セッションスコープ、アプリケーションスコープ内のオブジェクト
・ 要求パラメータ
・ JSP の暗黙的オブジェクト (pageContextなど)
・ HTTP のヘッダー、Cookie、および要求パラメータ
・ サーブレットのコンテキスト初期化パラメータ

JSP ページで使用できる全データの一覧については、『J2EE 1.4 Tutorial』の「Implicit Objects」の節にある「Expression Language」というタイトルが付いたページを参照してください。

ユーザー定義 JavaBean (従来の JavaBean または Enterprise Bean の参照) を、あらゆるスコープの状態変数にバインドできます。<jsp:useBean> タグを使用するだけで、そのページでスクリプトレットを使って新しい Bean を作成できます。さらに、EL 式ではあらゆる Bean に名前でアクセスできます。JSP 2.0 の式言語では、JavaBean の命名スキームを使って接続先の Bean 間の操作を行えます。この言語では、あらゆる JSP タグで使用できる式の構文も定義されています。JSP ページコンパイラは、JSP ページ内の区切り文字 ${ から } までのすべての文字列を 1 つの式として評価します。

JSP の式がどのように機能するかを説明するには、例を示すのが一番です。そこで、この記事に付属しているサンプルコードの例を見てみましょう。

サンプルコード


このサンプルコードは、従来の 2 つの JavaBean を使用する Web アプリケーションです。ColorScheme JavaBean は、色の名前をキーとして、ColorBean オブジェクトを値として使用する Map です。ColorBean オブジェクトには名前があり、この名前で ColorScheme に登録されます。このオブジェクトには赤、緑、青の 3 つの色成分があります。ColorScheme は javax.util.TreeMap の子クラスです。ColorScheme を反復処理することで、その中のすべての ColorBean を名前順に取り出すことができます。ColorBean は java.awt.Color の子クラスです。したがって、そのすべての継承メソッド (および JavaBeans プロパティ) を JSP EL から使用できます。

このアプリケーションの初期ページ、index.jsp では、1 つの ColorScheme オブジェクトに数百の ColorBean オブジェクトが格納されます。これらの ColorBean オブジェクトのデータは、Web アーカイブにあるテキストファイル (rgb.txt) から読み込まれます。このファイルには、データが次の形式で記録されています。
R G BName
240 248 255 AliceBlue

次のように、index.jsp の先頭にあるスクリプトレットによって、ColorScheme Bean が初期化され、この Bean が "scheme" という名前でセッション状態に格納されます。

 <jsp:useBean id="scheme"
class="com.elucify.tips.dec2003.ColorScheme"
scope="session">

<!-- Initialize this bean -->
<%
// Open a stream to the init file
InputStream stream =
application.getResourceAsStream("/developers/rgb.txt");

// Get a reference to the scheme bean
ColorScheme colorScheme =
(ColorScheme)pageContext.findAttribute(
"scheme");

// Load colors from stream
try {
colorScheme.load(stream);
} catch (IOException iox) {
throw new JspException(iox);
}
%>
</jsp:useBean>

(実際には、スクリプトレットではなく、タグファイル (JSP 2.0 の新機能) を使用した方が便利です。タグファイルについては、将来の Enterprise Java Technologies Tech Tips で解説する予定です。)

このコードでは、通常どおり <jsp:useBean> タグの中で、そのタグで作成する Bean を初期化しています。index.jsp でscheme Bean の初期化とセッションスコープへの格納が行われると、他の JSP ページでその Bean に含まれているデータの設定ができるようになります。

ColorScheme コレクションのサイズを出力する JSP ページは次のようになります。

 <%
ColorScheme scheme =
(ColorScheme)session.getAttribute("scheme");
out.println("The current color scheme has " +
scheme.size() + " colors.");
%>

JSTL と JSP の式言語を使用すると、コードがずっと単純になり、しかも読みやすくなります。サンプルページ Count.jsp では、次のコードが使用されています。

 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions"
prefix="fn" %>

最初の行では、JSTL の Functions パッケージに含まれているタグの接頭辞 fn を定義しています (このパッケージの詳細については『Tutorial』を参照)。2 番目の行は、${fn:length(scheme)} という式を含んだテンプレートテキストです。この式は、実行時に scheme オブジェクトの長さに置き換えられます。scheme は Map なので、length はマップ内の項目数を返します。この length 関数は全種類の Collection に適用できます。

サンプルページ ListColorNames.jsp では、さらに興味深い処理が実行されます。このページでは、ColorScheme Bean に含まれているすべての色の名前が一覧表示されます。

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>

This is a list of the names of all of the colors
in the current color scheme:

<ol>
<c:forEach var="entry" items="${scheme}">
<li>${entry.key}</li>
</c:forEach>
</ol>

<%@taglib%> の行では、c を JSTL の Core タグの接頭辞として定義しています。このページの残りの行では、順序付きリストを定義しています。<c:forEach> によって scheme コレクションに含まれているすべての項目が反復処理され、var 属性で指定された名前のページ変数に、このコレクションの中のそれぞれの値が順番に代入されます。この forEach タグはすべてのクラスの Collection に適用できます。

forEach タグの items 属性で指定された式の値が java.util.Map の場合、var で指定された変数は java.util.Map.Entry 型の項目になります。このコードでは、反復子変数の名前は entry なので、${entry.key} という式を使ってキーの名前を取得しています。

次の例に示すように、${entry.value} という式を使うと、個々の entry の値を取得できます。その理由は、 java.util.Map.Entry オブジェクトには getKey メソッドと getValue メソッドがあり、式言語は JavaBean の命名規則に従っているからです。一般に、JSP EL 式での ${a.b.c.d} のような式は、コードでは a.getB().getC().getD() として実行されます。このような式を使うと、短い表現で JavaBean のプロパティアクセスメソッドを連続的に呼び出すことができます。

サンプルページ ShowColors.jsp では、scheme に含まれている色が実際に表示されます。

This table demonstrates all of the colors 
in the current scheme.

<TABLE BORDER="1" BGCOLOR="WHITE">
<TR><TH>Name</TH><TH>Sample Text</TH><TH>Color Swatch</TH>
<TH>Hex Code</TH><TH>Opposite Color</TH></TR>

<!-- Loop over color entries in the scheme -->
<c:forEach var="entry" items="${scheme}">

<!-- Set two variables to improve -->
<!-- readability of HTML below -->
<c:set var="color"
value="${entry.value.rgbHex}"/developers/>
<c:set var="name"
value="${entry.key}"/developers/>

<TR>
<TD>${name}</TD>
<TD><FONT COLOR="${color}">${name}</FONT></TD>
<TD BGCOLOR="${color}">${name}</FONT></TD>
<TD>${color}</TD>
<TD BGCOLOR="${entry.value.rgbComplement}">
${name}</TD>
</TR>

</c:forEach>

前の例と同様に、この例でも <c:forEach> が使われています。2 つの <c:set> タグによって、color 属性が色の 16 進表現に、name 属性が色の名前に設定されます。JavaBean の命名規則に従っているため、

   <c:set var="color" value="${entry.value.rgbHex}"/developers/>

という行は、

   ColorBean cb = (ColorBean)entry.getValue();
   pageContext.setAttribute("color", cb.getRgbHex());

という Java コードと同じです。テンプレートテキストで使用されている color 属性と name 属性によって、JSP ページで出力される表の行が生成されます。ここでは <c:get> タグは使われていません。その理由は、EL 変数の値は、常に ${color} のような式の形で参照できるからです。

最後のサンプルページ ColorNameGrid.jsp では、JSTL タグの機能がさらに活用されています。このページでは、JSTL タグによって次の処理を行う方法が示されています。

・ 要求パラメータへのアクセス
・ 2 種類の方法での条件に基づく出力
・ EL の比較と演算子の使用
・ EL の算術関数の使用

ColorNameGrid.jsp では、ColorScheme に含まれているすべての色の名前が、複数の列から構成された表として出力されます。列の数は 1~10 の範囲で調節でき、その値は要求パラメータ cols によって指定されます。範囲外の値が指定された場合はエラーメッセージが出力されます。

ColorNameGrid.jsp ページのコードは次のようになっています。

-原文挿入-

最初の <c:set> タグでは、要求パラメータ cols が取得され、それが (要求パラメータと同じ cols という名前の) ページ属性に格納されます。このコードを次に示します。

  • Access request parameters
  • Perform conditional output two different ways
  • Use EL comparison and operators
  • Use EL arithmetic functions

(ページ属性 cols を使用する代わりに、すべての場所で ${param['cols']} を使用することもできます。ただし、ページ属性を定義した方がコードが読みやすくなります。)

2 番目の <c:set> タグでは、ページ属性 col の値が 1 に初期化されます。この変数は列の分割に使用されます。

<c:choose> タグの機能は Java の if-else 文に似ています。その中の <c:when> タグが if 文と else if 文の役割を果たし、<c:otherwise> タグが最後の else 文の役割を果たします。<c:choose> タグの中には <c:when> タグが並び、それぞれの <c:when> タグの中には test 属性があります。test 属性で指定された判定式が真になった最初の <c:when> タグの内容が評価され、出力に組み込まれます。どの <c:when> タグについても判定式が真にならなかった場合、代わりに <c:otherwise> タグの内容が評価され、出力されます。

この例では、最初の <c:when> タグの判定式は論理式です。

 <c:when test="${cols > 0 && cols <= 10}">

ここで使われている cols 変数は、前述した最初の <c:set> タグで定義されたページ属性です。要求された列数が 1 ~ 10 の範囲内にある場合は色の表が作成され、そうでない場合は (次の <c:otherwise> タグによって) エラーメッセージが出力されます。

 <c:otherwise>
<!-- Complain about unreasonable input -->
${cols} is an unreasonable number of columns.<p>
Click <a href="index.jsp">here</a> to try again.
</c:otherwise>

最初の <c:when> タグの中には、表を作成するコードが含まれています。<c:forEach> タグによって表に表示するすべての色が反復処理され、ColorScheme に含まれている個々の ColorBean が、ページ属性 color に順番に代入されます。

 <c:if test="${(col % cols) == 0}">
</TR><TR>
</c:if>
(注: 引用されているコードが適切ではないように思われます)

(${color.rgbHex}) という式によって、color Bean から色の 16 進表現が取得され、それぞれの色の名前がその色で出力されます。ループの最後で、改行が正しく行われるように col 変数が増分されます。

 <c:set var="col" value="${col+1}"/developers/>

最後に、算術式と <c:if> タグによって、列の末尾に達するたびに改行が行われます。

これらの例は、JSTL タグの機能のほんの一部を使用しているにすぎません。URL の処理、要求の転送、他の Web 資源からのコンテンツの取り込み、XML の処理、国際化コンテンツの作成、SQL クエリーの実行など、さまざまな機能を持つ JSTL タグがあります。このような JSTL の強力な新機能は、JSP の開発に大いに役立ちます。

サンプルコードの実行


この記事で取り上げたテクニックのサンプルアーカイブをダウンロードします。このアプリケーションのコンテキストルートは ttdec2003 です。ダウンロードした WAR ファイルにはサンプルの全ソースコードも含まれています。

アプリケーションアーカイブ (ttdec2003.war) を J2EE 1.4 Application Server に配備する場合、deploytool プログラムや管理コンソールを使用できます。asadmin コマンドを次のように使用することもできます。

asadmin deploy install_dir/ttdec2003.war

install_dir の部分は、WAR ファイルのインストール先のディレクトリ名に置き換えます。

このアプリケーションには、http://localhost:8000/ttdec2003 という URL を使ってアクセスできます。

J2EE 1.4 Application Server 以外の J2EE 1.4 に準拠した実装では、該当する J2EE 製品の配備ツールを使用して、アプリケーションをプラットフォームに配備します。

アプリケーションを起動すると、次のページが表示されます。