- Home ›
- サーブレット/JSP入門 ›
- クッキーの利用 ›
- HERE
クッキーの取り出し
ここではクライアントから送信されたクッキーを取り出してみましょう。
クッキーは、クッキー名や値の他に、クッキーが作成されたWebサーバのドメイン情報などを合わせて保存します。そして同じWebサーバに再度アクセスした場合に、そのWebサーバから発行されたクッキーがあれば保存していたクッキーをサーバへ送信します。
クライアントから送信されてきたクッキーは、サーブレットの"doGet"や"doPost"メソッドの引数である「HttpServletRequest」インターフェースのオブジェクトから取り出すことが出来ます。"getCookies"メソッドを使います。
getCookies public Cookie[] getCookies()
Returns an array containing all of the Cookie objects the client sent with this request. This method returns null if no cookies were sent. Returns: an array of all the Cookies included with this request, or null if the request has no cookies
クライアントから送られてきた全てのクッキーをCookieクラスのオブジェクトの配列として取得します。クッキーは同一のサーバから違うクッキー名を使って複数のクッキーをクライアントに保存することが出来ますので、クライアントから送られてくるクッキーも1つとは限りません。
もしクッキーがクライアントに保存されておらずサーバに送られてきたクッキーが存在しない場合はnullを返します。
特定のクッキーの検索
取得したCookieクラスのオブジェクトの配列の中から、特定のクッキー名を持つクッキーを探すにはクッキー名を1つ1つ調べるしかありません。「Cookie」クラスで用意されている"getName"メソッドを使います。
getName public java.lang.String getName()
Returns the name of the cookie. The name cannot be changed after creation. Returns: a String specifying the cookie's name
このメソッドを使って1つ1つクッキー名を取得し、取得したいクッキーを検索します。
クッキーの値を取得
目的のクッキーが見つかれば、今度は「Cookie」クラスで用意されている"getValue"メソッドで設定されている値を取得することが出来ます。
getValue public java.lang.String getValue()
Returns the value of the cookie. Returns: a String containing the cookie's present value
よって実際の使い方は下記のような感じとなります。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); Cookie cookie[] = request.getCookies(); if (cookie != null){ for (int i = 0 ; i < cookie.length ; i++){ if (cookie[i].getName().equals("visited")){ String val = cookie[i].getValue(); } } } }
サンプルプログラム
では一度試してみます。
web.xmlファイルは下記のようにしました。
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>cookietest</servlet-name> <servlet-class>CookieTest1</servlet-class> </servlet> <servlet> <servlet-name>dispvalue</servlet-name> <servlet-class>DispValue1</servlet-class> </servlet> <servlet-mapping> <servlet-name>cookietest</servlet-name> <url-pattern>/cookietest</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>dispvalue</servlet-name> <url-pattern>/dispvalue</url-pattern> </servlet-mapping> </web-app>
プログラムは下記のようになります。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class CookieTest1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); Cookie cookie = new Cookie("visited", "1"); response.addCookie(cookie); out.println("<html>"); out.println("<head>"); out.println("<title>クッキーテスト</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>クッキーを保存しました</p>"); out.println("<a href=¥"/cookie/dispvalue¥">クッキーを表示</a>"); out.println("</body>"); out.println("</html>"); } }
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DispValue1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); Cookie cookie[] = request.getCookies(); out.println("<html>"); out.println("<head>"); out.println("<title>クッキーを表示</title>"); out.println("</head>"); out.println("<body>"); if (cookie != null){ for (int i = 0 ; i < cookie.length ; i++){ if (cookie[i].getName().equals("visited")){ String val = cookie[i].getValue(); out.println("<p>"); out.println(cookie[i].getName()); out.println("="); out.println(val); out.println("</p>"); } } }else{ out.println("<p>クッキーが見つかりません</p>"); } out.println("<a href=¥"/cookie/dispvalue¥">クッキーを再表示</a>"); out.println("</body>"); out.println("</html>"); } }
上記をコンパイル後に「d:¥servlet-sample¥cookie¥WEB-INF¥classes¥」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/cookie/cookietest」へアクセスしてみます。
「クッキーを表示」をクリックして下さい。
上記のように表示されればクライアントからのクッキーを取得出来ています。
( Written by Tatsuo Ikura )