Servlet日記(1999/03/03)

本日の成果

 しばらくサボって、Delphiプログラマになっていましたが、勉強再開です。CGIプログラムを作っていて面倒なのが、セッション管理です。Servletでは、これを代行するAPIが用意されているようなので、試してみました。

 まず、最初にこのservletにアクセスすると、名前を入力するフォームが現れます。名前を入れて送信すると、名前の入った挨拶を返します。再度同じservletにアクセスすると、前に入力した名前を覚えていて、その名前の入った挨拶を返します。

HttpSession session = req.getSession(true);
String uName = (String)session.getValue("user.name");

if (uName == null) {
    String newName = req.getParameter("uName");
    if (newName == null) {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        out.print("<html><head><title>Session test</title></head>");
        out.print("<body><form method=get>enter your name:"
            + "<input type=text name=\"uName\"><br>");
        out.print("<input type=submit value=\"Send\">"
            + "</form></body></html>");
    } else {
        session.putValue("user.name", newName);

        res.setContentType("text/plain");
        PrintWriter out = res.getWriter();
        out.println("Hello " + newName);
    }
} else {
    res.setContentType("text/plain");
    PrintWriter out = res.getWriter();
    out.println("Welcome back " + uName);
}

 別々のブラウザから一つのservletにアクセスしてみると、ちゃんとそれぞれの名前を覚えています。ただ、セッションのキーをCookieを使ってブラウザに設定しているので、Cookieを無効にすると、この方法は使えなくなりました。ただし、Servletエンジンによっては、Cookieが使えない場合は、自動的に別の手段を使うものもあるようですが。

本日の教訓

 セッション管理APIを使うと、セッション管理が楽になります。しかし、ブラウザがCookieを必ず受け入れるようにするか、Servletエンジンを選ぶかする必要があることに注意。

Servlet日記(1999/02/23) Servlet日記の目次 Servlet日記(1999/03/06)