ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Web アプリケーション、サーブレット、JSP の開発
11g リリース 1 (10.3.1)
B55521-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

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

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

WebLogic カスタム JSP タグの概要

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

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

WebLogic カスタム タグを使用するには、タグを Web アプリケーションに入れる必要があります。

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

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

  2. このタグ ライブラリ記述子を、J2EE 標準 Web アプリケーション デプロイメント記述子 (web.xml) の <taglib> 要素で参照します。次に例を示します。

    <taglib>
      <taglib-uri>weblogic-tags.tld</taglib-uri>
      <taglib-location>
         /WEB-INF/lib/weblogic-tags.jar
      </taglib-location>
    </taglib>
    
  3. taglib ディレクティブを使用して、JSP 内でタグ ライブラリを参照します。次に例を示します。

    <%@ taglib uri="weblogic-tags.tld" prefix="wl" %>
    

cache タグ

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

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

2 つのバージョンの cache タグを使用できます。バージョン 2 にはスコープが追加されています。

キャッシュの更新

_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"/>
    

表 16-1 cache タグの属性

属性 必須 デフォルト値 説明
timeout
いいえ

-1

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

  • ms = ミリ秒

  • s = 秒 (デフォルト)

  • m = 分

  • h = 時間

  • d = 日

scope
いいえ
application

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

  • parameter、(バージョン 1、2) HTTP サーブレット要求のパラメータを要求。

  • page、(バージョン 1、2) JSP ページ コンテキストの属性を要求 (キャッシュ フィルタにはこのスコープは存在しない)。

  • request、(バージョン 1、2) サーブレット要求の属性を要求。要求属性は、転送またはインクルードされたページを含め、要求全体に対して有効。

  • cookie、(バージョン 2) 要求内で見つかったクッキーの値を要求。同じ名前のクッキーが複数ある場合、この要求は最初の値のみを返す。

  • requestHeader、(バージョン 2) 要求のヘッダにある値を要求。同じ名前のヘッダが複数ある場合、最初のヘッダの値のみを返す。

scope

(続き)



  • responseHeader、(バージョン 2) 応答のヘッダにある値を要求。同じ名前のヘッダが複数ある場合、最初のヘッダの値のみを返す。応答のヘッダを設定すると、すべての応答のヘッダが設定した値で置き換えられる。このスコープをコンテンツの格納に使用しないこと。

  • session、(バージョン 1、2) 現在のユーザのセッション属性の値を要求。セッションがない場合、このスコープにアクセスしてもセッションは作成されない。コンテンツをキャッシュしている場合はキャッシュが非常に大きくなることがある。

  • application、(バージョン 1、2) サーブレットのコンテキスト属性に含まれる値を要求。

  • cluster、(バージョン 1、2) アプリケーション スコープの値を要求。書き込みがあった場合はクラスタ全体に情報をレプリケートする。

ほとんどのキャッシュは、session または application スコープになる。

key
いいえ
--

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

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

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

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

async
いいえ
false

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

name
いいえ
--

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

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

システムで名前が指定されているキャッシュは、自動的にフラッシュして更新することはできない。

size
いいえ

-1 (無制限)

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

vars
いいえ

--

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

入力キャッシングを実行するために変数が使用される。キャッシュ取得時に変数は指定したスコープに復元される。たとえば、データベースから結果を取得するために、要求パラメータの var1 およびセッションの var2 を使用したとする。キャッシュ作成時、これらの変数の値がキャッシュに格納される。次回のキャッシュへのアクセス時、これらの値が復元されるため、個々の値のスコープからアクセスが可能。たとえば、var1 は要求から、var2 はセッションから取得できる。

flush

いいえ

なし

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


バージョン 2 のキャッシュ システムの追加プロパティ

  • 各キャッシュには、キャッシュに関連付けられる任意の属性が追加されている。そうした属性はエンド ユーザによる操作が可能であり、キャッシュ取得時に指定できます。

  • キャッシュ システムの任意のスコープにある java.util.List の「weblogicx.cache.CacheListener」キーに、weblogicx.cache.CacheListener を実装するオブジェクトを配置して、キャッシュのリスナを登録できる。スコープ内に List がある場合は、その末尾にリスナを追加します。

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

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

<wl:cache>
<!-- このタグに囲まれたコンテンツはサーバが再起動するときにのみ更新される -->
</wl:cache>

<wl:cache key="request.ticker" timeout="1m">
<!-- 要求パラメータ ticker にあるものの株価を取得して表示し、毎分それを更新する -->
</wl:cache>

<!-- 受信するパラメータ値 isbn は、データベース内の本のルックアップに使用される番号 -->
<wl:cache key="parameter.isbn" timeout="1d" size="100">
<!-- データベースから本を取得し、情報を表示する -- このタグはアクセスの多かった上位 100 冊の説明をキャッシュする -->
</wl:cache>

<wl:cache timeout="15m" async="true">
<!-- 15 分おきにデータベースから新しいヘッドラインを取得し、表示する -->
<!-- ヘッドラインの取得中の一時停止がユーザには分からないようにする -->
</wl:cache>

process タグ

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

表 16-2 process タグの属性

タグ属性 必須 説明

name

いいえ

クエリ パラメータの名前

notname

いいえ

クエリ パラメータの名前

value

いいえ

クエリ パラメータの値

notvalue

いいえ

クエリ パラメータの値


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

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

<wl:process notname="update">
<wl:process notname="delete">
<!-- パラメータの更新も削除もない場合にのみ表示する -->
<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">
<!-- 更新を行う -->
</wl:process>

<wl:process name="delete">
<!-- 削除を行う -->
</wl:process>
<wl:process name="lastBookRead" value="A Man in Full">
<!-- コードのこのセクションは、lastBookRead が存在し、lastBookRead の値が「A Man in Full」の場合に実行される -->
</wl:process>

repeat タグ

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

表 16-3 repeat タグの属性

タグ属性 必須 タイプ 説明

set

いいえ

Object

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

  • 列挙値

  • イテレータ

  • コレクション

  • 配列

  • ベクトル

  • 結果セット

  • 結果セット メタデータ

  • ハッシュテーブル キー

count

いいえ

Int

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

id

いいえ

String

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

type

いいえ

String

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


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

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

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

<% Vector v = new Vector();%> 
<!-- ベクトルに追加する -->

<wl:repeat id="item" set="<%= v.elements() %>">
<!-- 各要素を出力する -->
</wl:repeat>