<%--===========================================================================
  << jsp163.jsp >>

    JSP(6):応用(掲示板)

   メッセージはファイルに、一定時間保存する。
   ファイルは、絶対パス名(区切り記号は、\ではなく、/を使う)で指定する。

 ●起動法
  (1)JSPファイル(jsp163.jsp)を作成し、
     %CATALINA_HOME%\webapps\SV\jsp163.jsp
    に保存する。
  (2)HTMLファイル(hpj163.htm)を作成し、
     %CATALINA_HOME%\webapps\SV\hpj163.htm
    に保存する。
  (3)メッセージ記録ファイル(jsp163.dat)を作成し、
     c:\temp\jsp163.dat
    に保存する。
    (4)URL(http://localhost:8080/SV/hpj163.htm)を指定する。
============================================================================--%>

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>

<html>
<head><title>JSP</title></head>
<body>
<%
  request.setCharacterEncoding("JISAutoDetect");           

  ArrayList a = new ArrayList(); // 読み込み用配列。                     

  if( "登録".equals(request.getParameter("f3")) ) {
    synchronized(this) {
      try {                                                    
        // 入力ストリームと読み込み用配列の作成。
        String fname ="c:/temp/jsp163.dat";  
        if( new File(fname).exists() ) {
          FileReader fr = new FileReader(fname);         
          BufferedReader br = new BufferedReader(fr);            
          // 読込み。                                              
          String line;                                           
          while( (line = br.readLine()) != null ) { a.add(line); }
          br.close();
        }                                            

        // 出力ストリームと表示用配列の作成。
        FileWriter w = new FileWriter(fname);
        PrintWriter pw = new PrintWriter(w);
        long t0 =(new Date()).getTime(); // 現在時刻。単位はミリ秒。
        for( int i=0; i<a.size(); i=i+3 ) {
          String s1 = (String)a.get(i);
          long t1 = Long.parseLong(s1);
          if( t0-t1 <= 60*60*1000 ) { // 経過時間1時間以内のメッセージを保存。
            pw.println(s1);
            pw.println(a.get(i+1));
            pw.println(a.get(i+2));
          }
        }
        String s0 = "" + t0; // 整数値を文字列化。
        pw.println(s0);
        pw.println(request.getParameter("f1")); 
        pw.println(request.getParameter("f2")); 
        pw.close();
        out.println("登録しました");
      } catch( Exception e ) { }
    }
  }

  if( "表示".equals(request.getParameter("f3")) ) {
    synchronized(this) {
      try {                                                    
        // 入力ストリームと読み込み用配列の作成。
        String fname ="c:/temp/jsp163.dat";  
        if( new File(fname).exists() ) {
          FileReader fr = new FileReader(fname);         
          BufferedReader br = new BufferedReader(fr);            
          // 読込み。                                              
          String line;                                           
          while( (line = br.readLine()) != null ) { a.add(line); }
          br.close();
        }                                            
        // 投稿メッセージの表示。
        out.println("投稿数:" + a.size()/3 + "<br>");
        out.println("<hr>");
        int num = 0;
        for( int i=0; i<a.size(); i=i+3 ) {   
          num++;
          long t2 = Long.parseLong((String)a.get(i));
          Date dt = new Date(t2);
          out.println("登録番号[" + num + "] ");
          out.println("登録時刻:" + dt + "<br>");    
          out.println("投稿者:" + a.get(i+1) + "<br>");    
          out.println("メッセージ:" + a.get(i+2) + "<br>");
          out.println("<hr>");
        }        
      } catch( Exception e ) { }
    }
  }
%>

</body>
</html>
HTMLファイル(hpj163.htm)
<!-- << hpj163.htm >> -->
<html>
<head><title>JSP</title></head>
<body>
掲示板:
<form action=http://localhost:8080/SV/jsp163.jsp method=POST>
  名前:<input type=text size=20 name=f1><br>
  メッセージ:<input type=text size=40 name=f2><br>
  <input type=submit name=f3 value=登録>
  <input type=submit name=f3 value=表示>
</form>
</body>
</html>
実行結果

URL(http://localhost:8080/SV/hpj163.htm)を指定後




登録をクリック後


URL(http://localhost:8080/SV/hpj163.htm)を指定後


登録をクリック後


URL(http://localhost:8080/SV/hpj163.htm)を指定後


表示をクリック後


コマンドプロンプトを開き、ファイル(c:\temp\jsp163.dat)を確認