従来、JSP 1.2&サーブレット 2.3で提供されてきた標準的なAPIでは、クッキーに対して「名前」から直接にアクセスすることはできませんでした。そのため、例えば「author」という名前のクッキーにアクセスするにも、いちいちクッキー名をすべて走査し、「author」という名前が見つかったら、その値を取得するという原始的なコードを自らコーディングする必要があったのです。例えば、以下のようなコードになります。
// リクエスト・データに含まれるクッキー情報をすべて取得 Cookie[] coks=request.getCookies(); // クッキー配列が取得できた場合、配列内のすべての要素を走査 // 名前が"author"の場合にのみ、その値を取得する if(coks!=null){ for(int i=0;i<coks.length;i++){ if(coks[i].getName().equals("author")){ out.print(coks[i].getValue());} } }
しかし、JSP 2.0で導入された式言語を利用することで、JSPページにおけるクッキーの取得は劇的にシンプルになります。例えば、上のコードも式言語を使うと、以下のように記述できます。
${cookie['author'].value}
式言語の暗黙オブジェクトであるcookieはクッキー値そのものではなく、Cookieオブジェクトを返します。クッキー値を取得したいならば、上記の例のようにvalueプロパティ経由で取得しなければならない点に注意してください。
JSP 1.2の環境では式言語を利用することはできません。しかし、代わりにJakarta TagLibsに含まれるRequestタグライブラリを利用することで、スクリプトレットを利用しなくてもクッキーの取得を実現することができます。
Requestタグライブラリを利用するには、以下のサイトからjakarta-taglibs-request-current.zipをあらかじめ入手する必要があります。
・http://jakarta.apache.org/site/binindex.cgi
解凍したフォルダの中には、taglibs-request.jar、taglibs-request.tldというファイルが含まれるはずです。taglibs-request.jarをアプリケーションルート配下の「/WEB-INF/lib」フォルダに、taglibs-request.tldを「/WEB-INF」フォルダに、それぞれコピーしたうえで、web.xmlを以下のように編集してください。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <taglib> <taglib-uri>http://jakarta.apache.org/taglibs/request-1.0</taglib-uri> <taglib-location>/WEB-INF/tld/taglibs-request.tld</taglib-location> </taglib> </web-app>
web.xmlの編集後はアプリケーション(またはコンテナ)を再起動すれば、Requestタグライブラリが有効になります。
Requestタグライブラリの使い方は簡単です。例えば、上の用例と同様の処理を実現するには、JSPページに以下のように記述するだけです。
<%@ taglib prefix="req" uri="http://jakarta.apache.org/taglibs/request-1.0" %> <req:cookie name="author" />
もちろん、JSP 2.0環境では標準的な式言語を利用するべきですが、Requestタグライブラリには、<req:cookie>要素のほかにも暗黙オブジェクトrequestを代替する機能がさまざまに用意されています。JSP 2.0ユーザーの方にも有用な機能はあるはずなので、一度、Requestライブラリのドキュメント(http://jakarta.apache.org/taglibs/doc/request-doc/request-1.0/index.html)を参照してみるとよいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.