////////////////////////////////////////////////////////////////////////////////
//  << sv152.java >>
//
// サーブレット(5):クッキー(応用 アクセスカウンタ)
//
//   クッキーを使って、アクセスカウンタを作る。
//
// ●Cookieクラスのメソッド
//  public void setMaxAge(int t)
//   機能:クッキーの最大存続期間tを秒数で設定する。 
//      負の値を設定すると、Web ブラウザ終了時に削除される。
//      0を設定すると、削除される。
//
// ●起動法
//  (1)Javaファイル(sv152.java)をコンパイルし、classファイル(sv152.class)を
//       作成する。
//       ただし、Javaファイル(sv152.java)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv152.java
//     classファイル(sv152.class)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv152.class
//       に保存する。
//    (2)入力フォームで、
//         URL(http://localhost:8080/SV/servlet/sv152)
//       を指定する。
//
////////////////////////////////////////////////////////////////////////////////

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

public class sv152 extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response)
                     throws ServletException,IOException {

    // クッキーの受信。
    Cookie c[] = request.getCookies();

    // クッキー中から、項目(COUNT)を選び更新。
    int n=0;
    Cookie ck;
    for( int i=0; i<c.length; i++ ) {
      ck = c[i];
      String s1 = ck.getName();
      if( s1.equals("COUNT") ) { // 項目(COUNT)の更新。 
        String s2 = ck.getValue();
        n = Integer.parseInt(s2) + 1;
        ck = new Cookie(s1, String.valueOf(n));
        ck.setMaxAge( 60*60*24 ); // 有効期限は1日。 
        // クッキーの更新。
        response.addCookie(ck);
      } 
    }

    // クッキー中に項目(COUNT)がない場合、追加する。
    if( n == 0 ) { 
      n = 1;
      ck = new Cookie("COUNT", "1");
      ck.setMaxAge( 60*60*24 );
      response.addCookie(ck);
    }

    // コンテンツタイプの指定。
    response.setContentType("text/html; charset=Shift_JIS");

    // HTML文書を送信。
    PrintWriter pw = response.getWriter();
    pw.println("<html>"                                    
             + "<head><title>サーブレット</title></head>"  
             + "<body>"                                    
             + n + "回目のアクセスですね<br>"
             + "</body>"
             + "</html>");
    pw.flush();
    pw.close();
  }
}
入力フォーム
<form action=http://localhost:8080/SV/servlet/sv152 method=POST>
  <input type=submit value=実行>
</form>
実行結果

実行後(クッキーを作成したWebクライアントの接続が維持されている場合)


更新をクリック後


送信後(クッキーを作成したWebクライアントの接続が切れて新たに接続された場合)