クッキーをクライアントへ保存

広告

作成したクッキーをアクセスしてきたクライアントに保存します。ここでクライアントとは、このサーブレットが含まれるホームページを見に来た人のブラウザにクッキーを保存してもらうわけです。その為、ブラウザの設定でクッキーを受け取らない設定にしている人のブラウザにはクッキーは保存されません。

通常ブラウザがサーブレットを見に来た場合、"doGet"メソッドか"doPost"メソッドが呼ばます。そのメソッドの引数である「HttpServletResponse」インターフェースのオブジェクトに対して"println"メソッドなどを使うことでクライアントのブラウザにHTML文などを表示させていました。

public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws IOException, ServletException{

  response.setContentType("text/html; charset=Shift_JIS");
  PrintWriter out = response.getWriter();

  out.println("<html>");
  out.println("<head>");
  out.println("<title>Hello World!</title>");
  out.println("</head>");
  out.println("<body>");
  out.println("<p>Hello</p>");
  out.println("</body>");
  out.println("</html>");
}

クッキーをクライアントのブラウザに保存する場合にも、同じように「HttpServletResponse」インターフェースのオブジェクトに対して行います。具体的には「HttpServletResponse」インターフェースで定義されている"addCookie"メソッドを使います。

Adds the specified cookie to the response. This method can be called
multiple times to set more than one cookie. 

Parameters:
  cookie - the Cookie to return to the client

具体的には下記のような感じで使います。

public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws IOException, ServletException{

  response.setContentType("text/html; charset=Shift_JIS");
  PrintWriter out = response.getWriter();
  request.setCharacterEncoding("Shift-JIS");

  Cookie cookie = new Cookie("visited", "1");
  response.addCookie(cookie);
}

クライアント側がクッキーを受け入れる設定になっていれば、クッキーが保存されます。

サンプルプログラム

では一度試してみます。

今回作成するWebアプリケーションのパスは「cookie」とし、Webアプリケーションの置き場所は「d:¥servlet-sample¥cookie¥」としました。コンテキストファイルは下記のようになります。

cookie.xml

<Context path="/cookie"
docBase="d:/servlet-sample/cookie"/>

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>CookieTest</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>cookietest</servlet-name>
    <url-pattern>/cookietest</url-pattern>
  </servlet-mapping>
</web-app>

クッキーを作成してクライアントに保存するプログラムは下記のようになります。

CookieTest.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class CookieTest 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("</body>");
    out.println("</html>");
  }
}

上記をコンパイル後に「d:¥servlet-sample¥cookie¥WEB-INF¥classes¥」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/cookie/cookietest」へアクセスしてみます。

クッキーの保存

ここでクライアントにクッキーが保存されたかどうか確認してみます。

クッキーの保存

上記のようにクライアントに、クッキー名「visited」、値「1」、が保存されていることが確認できます。

( Written by Tatsuo Ikura )