///////////////////////////////////////////////////////////////////////////////
//  << sv163.java >>
//
// サーブレット(6):応用(名簿登録)
//
//  名簿への登録、削除、表示を行う。
//  ファイルを使って、記録する。
//
//  1件のレコードは3個のデータから構成される。
//   (1)名前
//   (2)学生番号
//   (3)登録時刻
//
// ●起動法
//  (1)Javaファイル(sv163.java)をコンパイルし、classファイル(sv163.class)を
//       作成する。
//       ただし、Javaファイル(sv163.java)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv163.java
//     classファイル(sv163.class)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv163.class
//       に保存する。
//    (2)入力フォームで、
//         URL(http://localhost:8080/SV/servlet/sv163)
//       を指定する。
//
///////////////////////////////////////////////////////////////////////////////

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

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

    int MAX = 3; // 最大登録数。

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

    // HTML文書を送信。
    PrintWriter pw = response.getWriter();
    pw.println("<html>"                                    
        + "<head><title>サーブレット</title></head>"  
        + "<body>"
        + "<h2>名簿登録</h2>"
        + "<form action=http://localhost:8080/SV/servlet/sv163 method=POST>"
        + "名前:<input type=text size=30 name=f1><br>"
        + "学生番号:<input type=text size=30 name=f2><br>"
        + "<input type=submit name=g1 value=登録>"
        + "<input type=submit name=g1 value=削除>"
        + "<input type=submit name=g1 value=表示>"
        + "</form>");
 
    synchronized(this) {
      ArrayList a = new ArrayList();

      /////////////////////////////
      // フォームのデータを取得。//
      /////////////////////////////
      request.setCharacterEncoding("JISAutoDetect");
      String s1 = request.getParameter("f1");
      String s2 = request.getParameter("f2");
      String t1 = request.getParameter("g1");

      ///////////////////////////
      // 名簿データ読込み処理。//
      ///////////////////////////
      try { 
        // 入力ストリームを生成。                          
        String fname = "c:/temp/sv163.dat";
        File f = new File(fname);
        if( f.exists() ) {  
          FileReader fr = new FileReader(fname);     
          BufferedReader br = new BufferedReader(fr);        
          // 読込み。                                          
          String line;
          while( (line = br.readLine()) != null ) { a.add(line); } 
          br.close();                                        
        }                            

        /////////////////
        // 登録数処理。//
        /////////////////
        if( a.size()/3 == MAX ) {
          pw.println("登録できません<br>"
                   + "</body>"
                   + "</html>");
          return;
        }

        ///////////////
        // 登録処理。//
        ///////////////
        if( "登録".equals(t1) ) {
          a.add(s1); a.add(s2); a.add(new Date());
          // 出力ストリームを生成。
          FileWriter w = new FileWriter(fname);
          PrintWriter out = new PrintWriter(w);
          for( int i=0; i<a.size(); i++ ) { out.println(a.get(i)); } 
          out.close();
          // HTML文書を送信。
          pw.println("登録しました<br>");
        } 

        ///////////////
        // 削除処理。//
        ///////////////
        if( "削除".equals(t1) ) {
          for( int i=0; i<a.size(); i=i+3 ) {
            if( ((String)a.get(i)).equals(s1) ) {
              a.remove(i); a.remove(i); a.remove(i);
              // 出力ストリームを生成。
              FileWriter w = new FileWriter(fname);
              PrintWriter out = new PrintWriter(w);
              for( int j=0; j<a.size(); j++ ) { out.println(a.get(j)); } 
              out.close();
              // HTML文書を送信。
              pw.println("削除しました<br>");
              break;
            }
          }
        }

        ///////////////
        // 表示処理。//
        ///////////////
        if( "表示".equals(t1) ) {
          if( a.size() > 0 ) {
            for( int i=0; i<a.size(); i=i+3 ) {
              // HTML文書を送信。
              pw.println("[" + (i/3+1) + "]: " + (String)a.get(i) + " " +
                  (String)a.get(i+1) + " " + (String)a.get(i+2) + "<br>");
            }
          }

          // HTML文書を送信。
          pw.println("登録数:" + a.size()/3 + "<br>");
        }
      } catch( Exception e ) {  
        System.out.println(e);
      }
    }

    // HTML文書を送信。
    pw.println("</body>"
            + "</html>");
    pw.flush();
    pw.close();    
  }
}
入力フォーム
<form action=http://localhost:8080/SV/servlet/sv163 method=POST>
  <input type=submit value=実行>
</form>
実行結果

実行後




登録をクリック後


表示をクリック後




削除をクリック後


表示をクリック後