WebLogic JSP Tag Extensions プログラマーズ ガイド
|
JSP タグ拡張のプログラミングの概要
JSP 1.1 仕様には、JavaServer Pages(JSP)ページでカスタム タグを作成および使用するための機能が導入されました。カスタム タグは、Web ページ作成者が使いやすく管理しやすいように、Web ページのプレゼンテーションからビジネス ロジックの複雑さを分離するための優れた方法です。JSP ページでカスタム JSP タグ拡張を使用すると、動的コンテンツを生成できます。また、さまざまな Web 開発ツールを使用して、プレゼンテーションを作成できるようになります。
WebLogic Server は、JSP 1.1 仕様に定義されているタグ拡張メカニズムを完全にサポートしています。
以下の節では、JSP タグ拡張の概要を示します。
カスタム タグ機能の概要
カスタム JSP タグを作成するには、タグ ハンドラと呼ばれる Java クラスを作成します。タグ ハンドラは、以下のいずれかの方法で作成します。
- タグのライフ サイクルの間に呼び出されるメソッドを定義する Tag または BodyTag インタフェースを実装します。
- Tag または BodyTag インタフェースを実装する抽象基本クラスを拡張します。
抽象基本クラスを拡張すると、タグ ハンドラ クラスがそのインタフェース内のすべてのメソッドを実装する必要がなくなります。また、他の便利な機能を使用できるようになります。TagSupport クラスと BodyTagSupport クラスが Tag または BodyTag インタフェースを実装し、API に組み込まれます。
1 つまたは複数の JSP タグをタグ ライブラリに登録することができます。タグ ライブラリは、タグ ライブラリ記述子(TLD)ファイルによって定義されます。TLD は各タグの構文を記述し、その機能を実行する Java クラスにそのタグを関連付けます。
JSP でのカスタム タグの使い方
カスタム タグは、以下のタスクを実行できます。
- 出力を生成します。タグの出力はその親スコープに送られます。スコープは以下のいずれかです。
- そのタグが JSP ページに直接含まれる場合には、その JSP ページの出力が親スコープとなります。
- そのタグが別の親タグ内でネストされている場合、その出力はその親タグの評価済み本体の一部になります。
- JSP ページの中でスクリプト変数として参照および使用できる新しいオブジェクトを定義します。タグは、固定名前付きスクリプト変数を導入するか、id 属性を備えた動的名前付きスクリプト変数を定義できます。
- 一定の条件が満たされるまで、そのタグ本体のコンテンツの処理を繰り返します。これは、出力を反復的に生成するか、またはサーバサイド アクションを繰り返し呼び出すために使用します。
- その JSP ページの残りの部分を要求の一部として処理するか、それともスキップするかを決定します。
カスタム タグのフォーマット
カスタム タグのフォーマットは、空タグと呼ばれる空のものか、または本体付きタグと呼ばれる本体を含むものです。どちらのタイプのタグも、そのタグを実装する Java クラスに渡される複数の属性を受け付けます。詳細については、タグ本体内の例外処理を参照してください。
空タグの形式は次のとおりです。
<mytaglib:newtag attr1="aaa" attr2="bbb" ... />
本体付きタグの形式は次のとおりです。
<mytaglib:newtag attr1="aaa" attr2="bbb" ... >
本体
</mytaglib:newtag>
タグ本体には、多くの JSP 構文、およびネストされた本体を持つ別のカスタム JSP タグを入れることができます。タグは、お互いの内部で任意のレベルにネストできます。次に例を示します。
<mytaglib:tagA>
<h2>これは tagA の本体です</h2>
このテキストはこれまでに <mytaglib:counter /> 回現れました !
<p>
<mytaglib:repeater repeat=4>
<p>Hello World!
</mytaglib:repeater>
</mytaglib:tagA>
上の例では、3 つのカスタム タグを使用して、本体付きタグの中にタグをネストする方法が示されています。これらのタグは、以下のように機能します。
- 本体付きタグ <mytaglib:tagA> は、その評価済み本体からの HTML 出力しか認識しません。つまり、ネストされた JSP タグの <mytaglib:counter> と <mytaglib:repeater> がまず評価され、それらの出力が <mytaglib:tagA> タグの評価済み本体の一部になります。
- 本体付きタグの本体がまず JSP として評価され、ネストされた本体付きタグも含め、その中に入っているすべてのタグが変換され、さらにそれらの本体が再帰的に評価されます。評価済み本体の結果が本体付きタグの出力として直接使用されるか、または本体付きタグがその評価済み本体のコンテンツに基づいて出力を決定します。
- 本体付きタグの JSP から生成される出力は、通常の HTML として取り扱われます。つまり、出力はさらに JSP として解釈されることはありません。
サンプル シナリオ
以下のシナリオに、カスタム タグを使用して何ができるかを示します。
- 空タグは、その属性に基づいてサーバサイドの作業を実行できます。そのタグが実行するアクションによって、ページの残りの部分を解釈するか、それともリダイレクトなどの別のアクションを実行するかが決められます。この機能は、ユーザがページにアクセスする前にログインしたかどうかをチェックし、ログインしていなければログイン ページにリダイレクトする場合に役立ちます。
- 空タグは、その属性に基づいてページにコンテンツを挿入できます。このようなタグを使用すると、ページのヒット数を数える単純なカウンタや、その他のテンプレート ベースの挿入を実装できます。
- 空タグは、その属性に基づいて、ページの残りの部分で使用可能なサーバサイド オブジェクトを定義できます。このタグを使用すると、同じ JSP ページ内の他の場所でデータのクエリを受けることができる EJB への参照を作成することができます。
- 本体付きタグは、ブラウザに送信される HTML ページの一部となる前にその出力を処理し、その出力を評価して、ブラウザに送信する HTML を決定できます。この機能は、「引用 HTML」、つまり再フォーマットされたコンテンツを生成するためか、または SQL クエリなどの他の関数に渡すパラメータとして使用できます(SQL クエリの場合、タグの出力はフォーマットされた結果セットとなる)。
- 本体付きタグは、特定の条件が満たされるまで、その本体を繰り返し処理できます。
タグ ライブラリの参照
JSP タグ ライブラリは、タグ ライブラリ記述子 (tld) によって定義されます。JSP ページからカスタム タグ ライブラリを使用するには、以下のように <%@ taglib %> ディレクティブを使用してそのタグを参照します。次に例を示します。
<%@ taglib uri="myTLD" prefix="mytaglib" %>
- uri
- JSP エンジンは、Web アプリケーション デプロイメント記述子(web.xml)の <taglib-uri> 要素で定義し uri とこの uri 属性を照合することによって、タグ ライブラリ記述子ファイルを見つけようとします。たとえば、上の taglib ディレクティブの myTLD は、次のように Web アプリケーション デプロイメント記述子のタグ ライブラリ記述子 (library.tld) を参照します。
<taglib>
<taglib-uri>myTLD</taglib-uri>
<taglib-location>library.tld</taglib-location>
</taglib>
- prefix
- prefix 属性は、タグ ライブラリにラベルを割り当てます。カスタム JSP タグを使用してページを作成する場合は、このラベルを使って関連するタグ ライブラリを参照します。たとえば、上の例のライブラリ(mytaglib)が newtag という新しいタグを定義した場合、このタグを JSP ページで使用するには、以下のように記述します。
<mytaglib:newtag>
詳細については、3-1 ページのタグ ライブラリ記述子の作成を参照してください。