WebLogic JSP プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、WebLogic Server 配布キットで提供される 3 つのカスタム JSP タグ (cache タグ、repeat タグ、process タグ) の使い方について説明します。
BEA では、JSP ページで使用できる 3 つの特殊な JSP タグを提供しています。これらは、cache
、repeat
、および process
です。これらのタグは、weblogic-tags.jar
というタグ ライブラリ jar ファイルにパッケージ化されています。この jar ファイルには、タグのクラスとタグ ライブラリ記述子 (TLD) が含まれています。これらのタグを使用するには、JSP を格納する Web アプリケーションにこの jar ファイルをコピーして、タグ ライブラリを JSP で参照します。
WebLogic カスタム タグを使うには、タグを Web アプリケーションに入れる必要があります。詳細については、『WebLogic Server Web アプリケーションの開発』を参照してください。
これらのタグを JSP で使用するには、次の手順に従います。
ext
ディレクトリの weblogic-tags.jar
ファイルを、WebLogic カスタム タグを使用する JSP を格納する Web アプリケーションの WEB-INF/lib
ディレクトリにコピーします。
<taglib>
<taglib-uri>weblogic-tags.tld</taglib-uri>
<taglib-location>
/WEB-INF/lib/weblogic-tags.jar
</taglib-location>
</taglib>
詳細については、Web アプリケーションの「デプロイメント記述子」の記述を参照してください。
<%@ taglib uri="weblogic-tags.tld" prefix="wl" %>
cache タグは、タグの本体内で行われた処理のキャッシングを有効にします。このタグは、出力 (変換) データと入力 (計算済み) データの両方をサポートします。出力キャッシングとは、タグ内のコードによって生成されたコンテンツを指します。入力キャッシングとは、タグ内のコードによって設定される変数の値を指します。出力キャッシングは、コンテンツの最終的な形式をキャッシュする必要がある場合に便利です。入力キャッシングは、タグ内で計算されるデータと無関係にデータ表示が変化する場合に有用です。
あるクライアントがキャッシュのコンテンツを再計算しているときに、別のクライアントが同じコンテンツを要求した場合には、再計算の完了を待つことなく、すでにキャッシュ内にある情報が表示されます。これは、キャッシュの再計算が原因で、すべてのユーザに対して Web サイトが停止することを回避するための仕組みです。さらに、async 属性を使用して、すべてのユーザ (キャッシュの再計算を開始したユーザも含む) に対して再計算の完了を待たないことを指定できます。
2 つのバージョンの cache タグを使用できます。バージョン 2 にはスコープが追加されています。
キャッシュは、キャッシング システムがシステム メモリを使いすぎないようにソフト参照を使って保存されます。ただし、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 属性値 (「表 4-1 cache タグの属性」を参照) が変更された場合にのみ実行されます。
キャッシュをフラッシュするとキャッシュされた値が強制的に消去され、次にキャッシュがアクセスされたときに値が再計算されます。キャッシュをフラッシュするには、flush
属性を true
に設定します。キャッシュには、name
属性を使用して名前を付ける必要があります。キャッシュに size
属性が設定されている場合は、すべての値がフラッシュされます。キャッシュに key
属性が設定されていて size
属性が設定されていない場合は、キャッシュをユニークに識別するために必要なその他の属性 (scope
や vars
など) とともにその key
属性を指定すると、特定のキャッシュをフラッシュできます。
<wl:cache name="dbtable" key="parameter.tablename"
scope="application">
// テーブルを読み込み、ページに出力する
</wl:cache>
<wl:cache name="dbtable" key="parameter.tablename" scope="application" flush="true"/>
<wl:cache><!-- このタグに囲まれたコンテンツはサーバが再起動するときにのみ更新される -->
</wl:cache>
<wl:cache key="request.ticker" timeout="1m"><!-- リクエスト パラメータ ticker にあるものの株価を取得し、表示する。
</wl:cache>
毎分それを更新する --><wl:cache key="parameter.isbn" timeout="1d" size="100">
<!-- 受信するパラメータ値 isbn は、データベース内の本のルックアップに使用される番号 --><!-- データベースから本を取得し、情報を表示する。
</wl:cache>
-- このタグはアクセスの多かった上位 100 冊の説明をキャッシュする -->
<wl:cache timeout="15m" async="true"><!-- 15 分おきにデータベースから新しいヘッドラインを取得し、表示する -->
</wl:cache>
<!-- ヘッドラインの取得中の一時停止がユーザには分からないようにする -->
<wl:process>
タグは、クエリ パラメータベースのフロー制御用に使用します。4 つの属性を組み合わせて使用することで、<wl:process>
タグと </wl:process>
タグに囲まれた文を選択的に実行できます。process タグは、フォームの送信結果を説明を付けて処理する場合にも使用できます。リクエスト パラメータの値を基に条件を指定することで、JSP 構文をページに含めるかどうかを指定できます。
次の例では、<wl: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>
<wl:repeat>
タグは、列挙値、イテレータ、コレクション、オブジェクト配列、ベクトル、結果セット、結果セットメタデータ、およびハッシュテーブル キーなど、さまざまなタイプの集合に対して処理を繰り返す場合に使用します。また、count
属性を使用して、一定回数だけループすることもできます。Java オブジェクトのタイプを指定するには、set 属性を使用します。
次の例では、<wl: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>
![]() ![]() |
![]() |
![]() |