- Home ›
- サーブレット/JSP入門 ›
- クッキーの利用
クッキーの取り出し
ここではクライアントから送信されたクッキーを取り出してみましょう。
クッキーは、クッキー名や値の他に、クッキーが作成された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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。