ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server Webアプリケーション、サーブレット、JSPの開発
11g リリース1 (10.3.6)
B60993-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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. このタグ・ライブラリ記述子を、Java EE標準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">
    // read the table and output it to the page
    </wl:cache>
    
  2. キャッシュされた表データを更新します。

  3. 空タグ(/で終了し、終了タグを使用しない)でflush属性を使用して、キャッシュをフラッシュします。次に例を示します。

    <wl:cache name="dbtable" key="parameter.tablename" scope="application" flush="true"/>
    

表16-1 cacheタグの属性

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

-1

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

  • ms = ミリ秒

  • s = 秒(デフォルト)

  • m = 分

  • h = 時間

  • d = 日

scope
no
application

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

  • parameter、(バージョン1、2) HTTPサーブレット・リクエストのパラメータをリクエストします

  • page、(バージョン1、2) JSPページ・コンテキストの属性をリクエストします(キャッシュ・フィルタにはこのスコープは存在しません。)

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

  • Cookie、(バージョン2)リクエスト内で見つかったCookieの値をリクエストします。同じ名前のCookieが複数ある場合、このリクエストは最初の値のみを戻します。

  • requestHeader、(バージョン2)リクエストのヘッダーにある値をリクエスト。同じ名前のヘッダーが複数ある場合、最初のヘッダーの値のみを戻します。

scope

(続き)



  • responseHeader、(バージョン2)レスポンスのヘッダーにある値をリクエストします。同じ名前のヘッダーが複数ある場合、最初のヘッダーの値のみを戻します。レスポンスのヘッダーを設定すると、すべてのレスポンスのヘッダーが設定した値で置き換えられます。このスコープをコンテンツの格納に使用しないでください。

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

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

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

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

key
no
--

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

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

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

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

async
no
false

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

name
no
--

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

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

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

size
no

-1 (無制限)

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

vars
no

--

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

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

flush

いいえ

なし

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


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

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

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

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

例16-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構文をページに含めるかどうかを指定できます。

表16-2 processタグの属性

タグ属性 必須 説明

name

いいえ

問合せパラメータの名前

notname

いいえ

問合せパラメータの名前

value

いいえ

問合せパラメータの値

notvalue

いいえ

問合せパラメータの値


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

例16-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属性を使用します。

表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();%> 
<!--add to the vector-->

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