BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic JSP プログラマーズ ガイド

 Previous Next Contents Index PDF で侮ヲ  

カスタム WebLogic JSP タグ (cache、process、repeat) の使い方

以下の節では、WebLogic Server 配布キットで提供される 3 つのカスタム JSP タグ (cache タグ、repeat タグ、process タグ) の使い方について説明します。

 


WebLogic カスタム JSP タグの概要

BEA では、JSP ページで使用できる 3 つの特殊な JSP タグを提供しています。これらは、cacherepeat、および process です。これらのタグは、weblogic-tags.jar というタグ ライブラリ jar ファイルにパッケージ化されています。この jar ファイルには、タグのクラスとタグ ライブラリ記述子 (TLD) が含まれています。これらのタグを使用するには、JSP を格納する Web アプリケーションにこの jar ファイルをコピーして、タグ ライブラリを JSP で参照します。

 


Web アプリケーションでの WebLogic カスタム タグの使い方

WebLogic カスタム タグを使うには、タグを Web アプリケーションに入れる必要があります。詳細については、『Web アプリケーションのアセンブルとコンフィグレーション』を参照してください。

これらのタグを JSP で使用するには、次の手順に従います。

  1. WebLogic Server の ext ディレクトリの weblogic-tags.jar ファイルを、WebLogic カスタム タグを使用する JSP を格納する Web アプリケーションの WEB-INF/lib ディレクトリにコピーします。

  2. このタグ ライブラリ記述子を、Web アプリケーション デプロイメント記述子 web.xml<taglib> 要素で参照します。次に例を示します。
    <taglib>
    <taglib-uri>weblogic-tags.tld</taglib-uri>
    <taglib-location>
    /WEB-INF/lib/weblogic-tags.jar
    </taglib-location>
    </taglib>

    詳細については、「Web アプリケーションのデプロイメント記述子の記述」を参照してください。

  3. taglib ディレクティブを使用して、JSP 内でタグ ライブラリを参照します。次に例を示します。
    <%@ taglib uri="weblogic-tags.tld" prefix="wl" %>

 


cache タグ

cache タグは、タグの本体内で行われた処理のキャッシングを有効にします。このタグは、出力 (変換) データと入力 (計算済み) データの両方をサポートします。出力キャッシングとは、タグ内のコードによって生成されたコンテンツを指します。入力キャッシングとは、タグ内のコードによって設定される変数の値を指します。出力キャッシングは、コンテンツの最終的な形式をキャッシュする必要がある場合に便利です。入力キャッシングは、タグ内で計算されるデータと無関係にデータ表示が変化する場合に有用です。

あるクライアントがキャッシュのコンテンツを再計算しているときに、別のクライアントが同じコンテンツを要求した場合には、再計算の完了を待つことなく、すでにキャッシュ内にある情報が表示されます。これは、キャッシュの再計算が原因で、すべてのユーザに対して Web サイトが停止することを回避するための仕組みです。さらに、async 属性を使用して、すべてのユーザ (キャッシュの再計算を開始したユーザも含む) に対して再計算の完了を待たないことを指定できます。

キャッシュは、キャッシング システムがシステム メモリを使いすぎないようにソフト参照を使って保存されます。ただし、HotSpot VM と Classic VM との間で互換性がないために、WebLogic Server が HotSpot VM 内で動作しているときは、ソフト参照が使用されません。

キャッシュの更新

_cache_refresh オブジェクトを true に設定することで、対象スコープ内で強制的にキャッシュを更新できます。セッション スコープでキャッシュを更新するには、次のように指定します。

<% request.setAttribute("_cache_refresh", "true"); %>

すべてのキャッシュを更新する場合は、キャッシュを application スコープに設定します。ユーザ向けのすべてのキャッシュを更新する場合は、キャッシュを session スコープに入れます。現在のリクエスト内のすべてのキャッシュを更新する場合は、_cache_refresh オブジェクトをパラメータとして設定するか、リクエスト内に設定します。

<wl:cache> タグは、表示されるたびに更新する必要のあるコンテンツを指定します。<wl:cache> タグと </wl:cache> タグで囲まれた文は、キャッシュが期限切れになるか、key 属性値 (表「cache タグの属性」を参照) が変更された場合にのみ実行されます。

キャッシュのフラッシュ

キャッシュをフラッシュするとキャッシュされた値が強制的に消去され、次にキャッシュがアクセスされたときに値が再計算されます。キャッシュをフラッシュするには、flush 属性を true に設定します。キャッシュには、name 属性を使用して名前を付ける必要があります。キャッシュに size 属性が設定されている場合は、すべての値がフラッシュされます。キャッシュに key 属性が設定されていて size 属性が設定されていない場合は、キャッシュをユニークに識別するために必要なその他の属性 (scopevars など) とともにその key 属性を指定すると、特定のキャッシュをフラッシュできます。

次に例を示します。

  1. キャッシュを定義します。
    <wl:cache name="dbtable" key="parameter.tablename"
    scope="application">
    //テーブルを読み込み、ページに出力する
    </wl:cache>

  2. キャッシュされたテーブル データを更新します。

  3. 空タグ (/ で終了し、終了タグを使用しない) で flush 属性を使用して、キャッシュをフラッシュします。次に例を示します。
    <wl:cache name="dbtable" key="parameter.tablename" scope="application" flush="true"/>

    表4-1 cache タグの属性

    属性

    必須

    デフォルト値

    説明

    timeout

    いいえ

    -1

    キャッシュ タイムアウト プロパティ。cache タグ内の文が更新されるまでの時間 (秒単位)。この属性はプロアクティブではなく、この値は要求時にのみリフレッシュされる。秒単位より時間単位の方がよい場合は、使用する単位を値の後に付けて指定できる。

    ms = ミリ秒
    s = 秒 (デフォルト)
    m = 分
    h = 時間
    d = 日

    scope

    いいえ

    application

    データをキャッシュするスコープを指定する。有効なスコープは次のとおり。

    • page (ページを要求する)

    • parameter (パラメータを要求する)

    • request (リクエストを要求する)

    • requestHeader (要求ヘッダを要求する)

    • responseHeader (応答ヘッダを要求する)

    • session (セッションを要求する)

    • application (アプリケーションを要求する)

    ほとんどのキャッシュは、session または application となる。

    key

    いいえ

    --


    タグ内に格納されている値をキャッシュするかどうかを評価する際に使用する値を指定する。指定されたキャッシュは通常、web.xml でコンフィグレーションしたキャッシュ名によって識別される。キャッシュ名が指定されていない場合は、リクエスト URI がキャッシュ名として使用される。タグを識別するために、キーを使用して追加の値を指定できる。たとえば、指定したエンド ユーザ用にキャッシュを分離する場合、キャッシュ名に加えて、ユーザ ID とクライアント IP (不要な場合もある) としてキーを指定できる。ユーザ ID は、リクエスト パラメータ スコープからキャッシュを取り出すための値 (パラメータのクエリ/ポスト)。したがって「parameter.userid,parameter.clientip」としてキーを指定する。「parameter」はスコープ (リクエスト パラメータ スコープ) であり、「userid」と「clientip」はそれぞれパラメータ、属性である。つまり、キャッシュの主キーはキャッシュ名 (この場合はリクエスト URI) + ユーザ ID リクエスト パラメータの値 + クライアント IP リクエスト パラメータの値になる。

    キーのリストはカンマで区切る。この属性の値はキーとしてキャッシュに入れる値を持つ変数の名前となる。スコープ名を名前の前に付加することで、さらにスコープを指定できる。次に例を示す。

    parameter.key | page.key | request.key | application.key | session.key

    デフォルトでは、上のリストの順でスコープ内を検索する。名前を付けた各キーは、cache タグ内でスクリプト変数として使用可能となる。キーのリストはカンマで区切る。

    async

    いいえ

    false

    async パラメータを true に設定すると、可能であれば、キャッシュは非同期で更新される。キャッシュ ヒットを開始するユーザには古いデータが表示される。

    name

    いいえ

    --


    複数の JSP ページ間でキャッシュを共有可能とするユニークなキャッシュの名前。同じバッファが、名前を付けたキャッシュを使用するすべてのページのデータを格納するために使用される。この属性は、キャッシュを共有する必要があり、本文をインクルードされるページで有用。この属性が設定されていない場合、ユニークな名前がキャッシュに割り当てられる。

    キーの機能はどんな場合にも同じように使用できるので、タグの名前を手動で算出することは避ける。名前の算出方法は、weblogic.jsp.tags.CacheTag に URI を加え、さらにキャッシュするページ内のタグを表す生成済み番号を加える。別々の URI が同じ JSP ページに達する場合、キャッシュはデフォルトでは共有されない。名前付きのキャッシュはこうした場合に使用する。

    size

    いいえ

    -1 (無制限)

    キーを使用するキャッシュごとに許可されるエントリの数。デフォルトでは、キーのキャッシュを制限しない。キーの数を制限すると、タグはキャッシュに指示するために最小使用頻度方式 (least-used system) を使用する。使用中のキャッシュの size 属性の値を変更しても、そのキャッシュのサイズは変わらない。

    vars

    いいえ

    --

    変換されたキャッシュの出力をキャッシュするだけでなく、算出された値もブロック内にキャッシュできる。これらの変数はキャッシュ キーと正確に同じように指定する。このタイプのキャッシュを入力キャッシュという。

    変数は入力キャッシングを行うために使用される。キャッシュが取得されると、変数は指定したスコープに復元される。たとえば、データベースからの結果を取得するために、リクエスト パラメータから var1、セッションから var2 を使用したとする。キャッシュが作成されると、これらの変数の値はキャッシュで格納される。次回キャッシュにアクセスすると、これらの値が復元されるので、それぞれのスコープから値にアクセスできるようになる。たとえば、var1 はリクエストから、var2 はセッションから使用できるようになる。

    flush

    いいえ

    なし

    true に設定すると、キャッシュがフラッシュされる。この属性は、空タグ (/ で終了) 内で設定する必要がある。


     

次の例では、<wl:cache> タグの使い方を示します。

コード リスト 4-1 cache タグの使い方の例

<wl:cache>
<!--the content between these tags will only be
refreshed on server restart-->
</wl:cache>

<wl:cache key="request.ticker" timeout="1m">
<!--get stock quote for whatever is in the request parameter ticker
and display it, only update it every minute-->
</wl:cache>

<!--incoming parameter value isbn is the number used to lookup the
book in the database-->
<wl:cache key="parameter.isbn" timeout="1d" size="100">
<!--retrieve the book from the database and display
the information -- the tag will cache the top 100
most accessed book descriptions-->
</wl:cache>

<wl:cache timeout="15m" async="true">
<!--get the new headlines from the database every 15 minutes and
display them-->
<!--do not let anyone see the pause while they are retrieved-->
</wl:cache>

 


process タグ

<wl:process> タグは、クエリ パラメータベースのフロー制御用に使用します。4 つの属性を組み合わせて使用することで、<wl:process> タグと </wl:process> タグに囲まれた文を選択的に実行できます。process タグは、フォームの送信結果を説明を付けて処理する場合にも使用できます。リクエスト パラメータの値を基に条件を指定することで、JSP 構文をページに含めるかどうかを指定できます。

表4-2 process タグの属性

タグ属性

必須

説明

name

いいえ

クエリ パラメータの名前

notname

いいえ

クエリ パラメータの名前

value

いいえ

クエリ パラメータの値

notvalue

いいえ

クエリ パラメータの値


 

次の例では、<wl:process> タグの使い方を示します。

コード リスト 4-2 process タグの使い方の例

<wl:process notname="update">
<wl:process notname="delete">
<!--Only show this if there is no update or delete parameter-->
<form action="<%= request.getRequestURI() %>">
<input type="text" name="name"/>
<input type="submit" name="update" value="Update"/>
<input type="submit" name="delete" value="Delete"/>
</form>
</wl:process>
</wl:process>
<wl:process name="update">
<!-- do the update -->
</wl:process>

<wl:process name="delete">
<!--do the delete-->
</wl:process>
<wl:process name="lastBookRead" value="A Man in Full">
<!--this section of code will be executed if lastBookRead exists
and the value of lastBookRead is "A Man in Full"-->
</wl:process>

 


repeat タグ

<wl:repeat> タグは、列挙値、イテレータ、コレクション、オブジェクト配列、ベクトル、結果セット、結果セットメタデータ、およびハッシュテーブル キーなど、さまざまなタイプの集合に対して処理を繰り返す場合に使用します。また、count 属性を使用して、一定回数だけループすることもできます。Java オブジェクトのタイプを指定するには、set 属性を使用します。

表4-3 repeat タグの属性

タグ属性

必須

説明

set

いいえ

Object

以下を含むオブジェクトの集合。

  • 列挙値

  • イテレータ

  • コレクション

  • 配列

  • ベクトル

  • 結果セット

  • 結果セット メタデータ

  • ハッシュテーブル キー

count

いいえ

int

集合内で最初の count エントリに対して処理を繰り返す。

id

いいえ

String

反復処理の対象となる現在のオブジェクトを格納する変数。

type

いいえ

String

渡された集合に対して処理を繰り返して得られるオブジェクトの型。デフォルトは Object。この型は完全修飾しなければならない。

次の例では、<wl:repeat> タグの使い方を示します。

コード リスト 4-3 repeat タグの使い方の例

<wl:repeat id="name" set="<%= new String[] { "sam", "fred", "ed" } %>">
<%= name %>
</wl:repeat>

<% Vector v = new Vector();%>
<!--add to the vector-->

<wl:repeat id="item" set="<%= v.elements() %>">
<!--print each element-->
</wl:repeat>

 

Back to Top Previous Next