サーブレットでクッキーを追加する
では、送信されたフォーム情報を元にクッキーを新たに追加するサーブレットを作成しましょう。これはクッキー追加後、再び送信元のJSPファイル(ここではindex.jspとします)に戻るようにしておきます。前回やったRequestDispatcherを使った移動ですね。
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class NewServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// クッキーの追加
String name = request.getParameter("name");
String value = request.getParameter("value");
if (name != null && value != null) {
Cookie newcookie = new Cookie(name,value);
newcookie.setMaxAge(60 * 60 * 24 * 1);
response.addCookie(newcookie);
}
ServletContext context = this.getServletContext();
RequestDispatcher dispatcher =
context.getRequestDispatcher("/index.jsp");
dispatcher.forward(request,response);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
ざっとこんな感じになるでしょうか。ここではdoGet/doPostの両方からprocessRequestを呼び出す形で書いてあります。最初にsetCharacterEncodingした後、getParameterでそれぞれの送信情報を取り出し、新規にCookieインスタンスを作ってresponse.addCookieをするだけです。
ただし、ここで注意しておきたいのは、addCookieする前に「newcookie.setMaxAge」というものを呼び出しているという点です。これは、「クッキーの保管期間を設定する」という働きをするものです。これで引数に秒数を設定すると、それだけの時間が経過するまでクッキーを保存し続けます。ここでは1日だけ保存するようにしてあるわけですね。
「もし、setMaxAgeしなかったらどうなるか?」というと、その場合はブラウザ終了とともにクッキーも消えてしまいます。つまり、アクセスしている間(正確にはセッションが確立されている間)だけ保持され、後に残らないクッキーとなるのです。これはこれで使い道がありますから、覚えておきましょう。