Oracle® Fusion Middleware Oracle WebLogic Server Webアプリケーション、サーブレット、JSPの開発 12c (12.2.1.1.0) E77264-02 |
|
![]() 前 |
![]() 次 |
cache
、repeat
およびprocess
)の使用方法について説明します。
この章の内容は以下のとおりです。
Oracleでは、JSPページで使用できる特殊なJSPタグとして、cache
、repeat
、およびprocess
の3つを提供しています。これらのタグは、weblogic-tags.jar
というタグ・ライブラリjarファイルにパッケージされています。このjarファイルには、タグのクラスとタグ・ライブラリ記述子(TLD)が含まれています。これらのタグを使用するには、JSPを格納するWebアプリケーションにこのjarファイルをコピーして、タグ・ライブラリをJSPで参照します。
WebLogicカスタム・タグを使用するには、タグをWebアプリケーションに入れる必要があります。
これらのタグをJSPで使用するには:
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属性値(表16-1を参照)が変更された場合にのみ実行されます。
キャッシュをフラッシュするとキャッシュされた値が強制的に消去され、次にキャッシュがアクセスされたときに値が再計算されます。キャッシュをフラッシュするには、flush
属性をtrue
に設定します。キャッシュには、name
属性を使用して名前を付ける必要があります。キャッシュにsize
属性が設定されている場合は、すべての値がフラッシュされます。キャッシュにkey
属性が設定されていてsize
属性が設定されていない場合は、キャッシュを一意に識別するために必要なその他の属性(scope
やvars
など)とともにそのkey
属性を指定すると、特定のキャッシュをフラッシュできます。
例:
表16-1 cacheタグの属性
属性 | 必須 | デフォルト値 | 説明 |
---|---|---|---|
timeout |
no |
|
キャッシュ・タイムアウト・プロパティ。cacheタグ内の文がリフレッシュされるまでの時間(秒単位)。この属性はプロアクティブではなく、この値はリクエスト時にのみリフレッシュされます。秒単位より時間単位の方がよい場合は、使用する単位を値の後に付けて指定できます。
|
scope |
no |
application |
データをキャッシュするスコープを指定します。有効なスコープは次のとおりです。
|
scope (続き) |
ほとんどのキャッシュは、sessionまたはapplicationスコープになります。 |
||
key |
no |
-- |
タグ内に格納されている値をキャッシュするかどうかを評価する際に使用する値を指定します。通常、ある特定のキャッシュは、 キーのリストはカンマで区切ます。この属性の値はキーとしてキャッシュに入れる値を持つ変数の名前となります。スコープ名を名前の前に付加することで、さらにスコープを指定できます。例: parameter.key | page.key | request.key | application.key | session.key デフォルトでは、上のリストの順でスコープ内を検索します。名前を付けた各キーは、cacheタグ内でスクリプト変数として使用可能となります。キーのリストはカンマで区切ります。 |
async |
no |
false |
|
name |
no |
-- |
複数のJSPページ間でキャッシュを共有可能とする一意のキャッシュの名前。同じバッファが、名前を付けたキャッシュを使用するすべてのページのデータを格納するために使用されます。この属性は、キャッシュを共有する必要があり、本文をインクルードされるページで有用。この属性が設定されていない場合、一意の名前がキャッシュに割り当てられます。
システムで名前が指定されているキャッシュは、自動的にフラッシュしてリフレッシュすることはできません。 |
size |
no |
|
キーを使用するキャッシュごとに許可されるエントリの数。デフォルトでは、キーのキャッシュを制限しません。キーの数を制限すると、タグはキャッシュに指示するために最小使用頻度方式(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>
<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>
<wl:repeat>
タグは、列挙値、イテレータ、コレクション、オブジェクト配列、ベクトル、結果セット、結果セット・メタデータ、およびハッシュ表キーなど、様々なタイプの集合に対して処理を繰り戻す場合に使用します。また、count
属性を使用して、一定回数のみループすることもできます。Javaオブジェクトのタイプを指定するには、set属性を使用します。
表16-3 repeatタグの属性
タグ属性 | 必須 | タイプ | 説明 |
---|---|---|---|
set |
いいえ |
Object |
以下を含むオブジェクトの集合。
|
count |
いいえ |
Int |
集合内で最初のcountエントリに対して処理を繰り戻します。 |
id |
いいえ |
String |
反復処理の対象となる現在のオブジェクトを格納する変数。 |
type |
いいえ |
String |
渡された集合に対して処理を繰り返して得られるオブジェクトの型。デフォルトは |
次の例では、<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>