Standard Taglib を始めましょう

本ドキュメントは、Java Server Pages™ 標準タグライブラリ (JSTL) 実装である、 Standard Taglib の立ち上げ方やすぐに動かすための手順を記述したものです。 JSTL の持つ機能に興味のある JSP ページの著者やカスタムタグの開発者の役に立ってくれることでしょう。 また "standard-examples" アプリケーションを活用することも、JSTL の機能や使い方に慣れるための最も良い方法といえます。


はじめに

JSTL って何? どこから来たのでしょうか?

JSTL とは、Java Server Pages 標準タグライブラリのことです。 Java Community Process (JCP) の努力により、JSR-052 Expert Group を通じて発表されました。

JSTL はどんなことをするのでしょうか?

JSTL は、多くの JSP アプリケーション上で共通利用する基本機能を、シンプルなタグとしてカプセル化したものです。 例えば、リストの反復処理をスクリプトレットや多くのベンダから提供されている異なったタグを使用する代わりに、 JSTL では、使う場所に関係なく反復処理を行うことのできる <forEach> という標準タグを定義しています。

この標準化により、1つのタグを覚えるだけで、様々な JSP コンテナで同じタグを使用することが可能になります。 また、タグが標準化されることにより、コンテナは標準タグを認識すると同時に、標準タグの実装に合わせて最適化することが可能になります。

JSTL では、基本となる「反復」や「条件分岐」、「テキスト挿入」、「国際化と書式タグ」、「XML操作タグ」をサポートしています。 また、JSP ページの開発を簡単にする 式言語 ( Expression Language ) もサポートしています。 開発者は JSTL の持つ拡張メカニズムに興味をもってくれることでしょう。 さらに JSTL では、既存のカスタムタグを JSTL タグへ統合するためのフレームワークも提供しています。

Standard Taglib リリースの更新状況はどうなっていますか?

過去リリースからの更新状況に関しては、 リリースノート を参照してください。

JSTL についてもっと学習するにはどうしたらよいでしょうか。

http://java.sun.com/products/jstl にある Sun の公式 JSTL ページに、JSTLの学習を手助けする書籍や資料の一覧があります。

 


さっそく始めましょう

Standard Taglib は、JSP 1.2 仕様で追加された機能を使用していますので、 動作には JSP 1.2 仕様に準拠したコンテナが必要となります。 Standard Taglib のテスト環境として Tomcat 4.0 をお薦めします。
[ 訳注: Tomcat 4.1 も Standard Taglib のテスト環境として十分に適しています。 ]

Tomcat のインストールに関しては、 http://jakarta.apache.org/tomcat に書かれている手順に従ってください。 そして、Web アプリケーション上で利用する目的で Standard Taglib をインストールするには、 http://jakarta.apache.org/taglibs/binarydist.html に書かれている手順に従ってください。 また、"standard-examples" アプリケーションを手引きとして利用することも可能です。

Jakarta Taglibs ディストリビューションから Standard Taglib を利用するには、 ディストリビューションの 'lib' ディレクトリにある JAR ファイルをアプリケーションの WEB-INF/lib ディレクトリへコピーするだけです。 次の JAR ファイルは Standard Taglib ディストリビューションに含まれており、 アプリケーションの WEB-INF/lib ディレクトリへコピーされていないといけません。

名称 説明 Jar ファイル名
JSTL 1.0 API クラス
JSTL 1.0 API クラス。
jstl.jar
JSTL 1.0 実装クラス
Standard Taglib JSTL 実装クラス。
standard.jar
Jaxen 1.0
XPath 式で記述された値を評価する XPath エンジン。
jaxen-full.jar
Saxpath 1.0
XPath 式の規則に基づいた構文解析を行うための一つの方法を提供した XPath の汎用 API 。
saxpath.jar
JDBC 2.0 オプションパッケージ

JDBC 実装クラス。

J2SE 1.4 には標準で含まれています。

jdbc2_0-stdext.jar
JAXP 1.1 または JAXP 1.2 実装
Standard Taglib では、JAXP 1.1 または 1.2 と互換性のあるパーサが必要です。
JAXP 1.1 実装クラスの一例
  • crimson.jar

JAXP 1.2 実装クラスの一例
  • jaxp-api.jar
  • dom.jar
  • sax.jar
  • xercesImpl.jar
Xalan

Apache XML Xalan XSLT
変換プロセッサ。

Xalan 2.2.D12 またはそれ以降のバージョンを使用する際には、 JAXP API に含まれている xml-apis.jar を入手しておく必要があるでしょう。

xalan.jar

多様なタグライブラリ

Standard Taglib は、次のように構成されています。

機能名 URI 接頭辞 記述例
コア http://java.sun.com/jstl/core
c
<c:tagname ...>
XML 操作 http://java.sun.com/jstl/xml
x
<x:tagname ...>
I18N フォーマット http://java.sun.com/jstl/fmt
fmt
<fmt:tagname ...>
データベースアクセス (SQL) http://java.sun.com/jstl/sql
sql
<sql:tagname ...>

Standard Taglib の使い方は簡単です。 taglib 指示子を使う JSP ページ上で taglib 接頭辞を普通に宣言してください。 例えば、JSP ページ上で 'コア' JSTL ライブラリを宣言するには、 JSP ページの先頭に次のような一行を挿入します。

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

式言語 ( Expression language )

JSTL の約半分のタグ -- 一押しのタグ -- は、式言語が欠かせません。 JSP ページの著者は、式言語 ( EL ) を使うことにより、 アプリケーション内部のデータへのアクセスや操作が簡単になります。

デフォルト版の式言語 ( EL ) に関する概要や詳しい定義については、 JSTL 1.0 仕様 の第3章、および、付録Aを参照してください。
[ 訳注: JSTL 1.0 仕様の「第3章 Expression Language Overview」、「付録A Expression Language Definition」を参照してください。 ]

Standard Taglib の初期バージョンでは、式言語の実験およびフィードバックを促進するために、いくつかの異なった式言語を切り替えて使用していました。 その後、式言語のデフォルト版が決定されたことにより、式言語を数種類でサポートする必要がなくなりました。

このライブラリに含まれる EL 版のタグにセットされた属性においては、 要求時属性値 ( rtexprvalue ) を ( スクリプトレット式として ) 受け入れません。 その代わりに、タグの実行時に評価するリテラル式を指定します。 例えば、このような感じです。

    <c:forEach items="${page.myItems}" />

JSTL で取り扱っているテーマ

( 機能仕様について ) 十分に議論しあった結果、JSTL に、「反復」、「条件分岐」、および、「式言語」をサポートするコアタグが含まれるようになりました。 なお、これらのタグの働きに関する細かい情報をもっと知りたい場合は、JSTL 仕様 を参照してください。 ここでは、少しでも早く慣れてもらえるよう、各機能のクイックロードマップをさっそく紹介していきます。

反復
基本的な反復タグは <forEach> であり、大抵の Collection オブジェクト、および 反復させたい同類のオブジェクトに対し、反復処理を実行します。 <forTokens> は、String オブジェクトのトークンに従って反復処理を実行させます。 その際、String や区切り文字を指定します。
条件分岐
JSTL では、単一条件分岐の <if> タグをサポートしています。 そのほかに、相互排他的な条件分岐をサポートする -- <choose>、 <when>、 そして <otherwise> -- のタグ一式が用意されています。 これらのうち、後者に上げた3つのタグは、典型的な if/else if/else if/else 構造の条件分岐処理を実装します。
式言語
JSTL では、式言語をどんどん利用してもらえるよう、タグをいくつか用意しています。 <out> は 式言語 ( EL ) の文法規則に基づいて記述された特定の式の値を出力するもので、 スクリプトレット式である (<%= ... %>) 構文が、スクリプト言語 ( Java が典型例 ) の文法規則に基づいた式の値を出力する処理と同様です。 <set> は、JSP スコープ属性に ( 例えば、request、page、session、または、application スコープの値として ) 式の値をセットします。
テキスト挿入
JSP では <jsp:include> タグが用意されていますが、 この標準アクションは相対 URL 形式の指定しか対応していないという制限があります。 そこで JSTL では、<c:import> タグを用意しており、絶対 URL 形式の指定が可能となりました。 例えば、HTTP 形式の URL を指定して Web サイトからダウンロードした情報や、FTP 形式の URL を使ってファイルサーバからダウンロードした情報を挿入するために <c:import> を使うことができます。 またこのタグはパフォーマンスを最適化する高度なサポートがいくつか施されており、 挿入されるデータの不必要なバッファリングを回避することができます。
I18N テキストフォーマット
データの書式化は、多くの JSP ページにおけるキータスクの1つです。 JSTL では、データの書式化や解析処理をサポートするタグを用意しています。 これらのタグは、国際化に対応したアプリケーションをサポートする便利なしくみが取り入られています。
XML 操作
今日、XML を見かけないことはまずありえないでしょう。 JSTL では、JSP ページ上で XML を操作するための便利な機能が提供されています。 JSP ページ上から、ドキュメントを解析したり、内容を参照するのに XPath を使用したり、XSLT 変形を行うことができます。
データベースアクセス
SQL アクションを使うリレーショナルデータベースへの簡単なアクセス方法を提供します。 データベースの検索処理、検索結果への簡単なアクセス、更新処理、そして、いくつかのオペレーションをまとめるトランザクション処理を実行することができます。
 

カスタムタグの開発者へ...

カスタムタグの開発者は、JSTL 仕様 も必ず参照するようにしてください。 JSTL では、より短い時間でタグを開発できるよう支援してくれたり、カスタムタグを JSTL タグセットへ統合させるための抽象クラスをいくつか用意しています。

例えば、カスタムタグでは JSTL の持つ式言語のメカニズムを利用することができます。 他の例として、javax.servlet.jsp.jstl.core.ConditionalTagSupport を継承することにより、 そのタグであなたのやりたい条件分岐処理の振舞に対する boolean 値を返すメソッドを単純に実装すればよいだけの、独自の条件分岐タグを書くことができます。 また、この基底クラスは、JSTL の条件分岐タグの設計に対する推奨モデルを促進します。

同様に、 javax.servlet.jsp.jstl.core.IteratorTagSupport を使うと、 反復タグを簡単に実装することができます。 <forEach> と <forTokens> のタグハンドラは、このクラスを継承しています。 従って、自作可能なカスタムサブタグと反復タグとが連動するための明確なメカニズムを提供する javax.servlet.jsp.jstl.core.IteratorTag インターフェースを実装しています。 そのようなカスタムサブタグの使用方法に関する一例が載っている "standard-examples" アプリケーションを参照してください。

関連書籍

現在、JSTL を取り上げている下記の書籍が発売中です。

[訳注: これは、小川 環が翻訳しました。日本語訳に対するコメントがあれば、 report@jajakarta.org に送って下さい。]