連載
» 2005年02月08日 10時00分 UPDATE

JavaTips 〜JSP/サーブレット編:クッキー値を取得(Jakarta Taglibs+式言語)

[山田祥寛,@IT]

 従来、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環境ではどうすればよい?

 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を以下のように編集してください。

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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。