<%--===========================================================================
  << jsp161.jsp >>

    JSP(6):応用(アクセスカウンタ)

   カウンタの値はファイルに保存する。
   ファイルは、絶対パス名(区切り記号は、\ではなく、/を使う)で指定する。

 ●変数の有効範囲
  <%!〜%>内で宣言された変数は、インスタンス変数となる。
  すなわち、登録ボタンや更新アイコンをクリックして再表示させると、変数countは、
  1増加する。
    一方、<%〜%>内で宣言される変数では、再表示のたびにリセットされる。

 ●起動法
  (1)JSPファイル(jsp161.jsp)を作成し、
     %CATALINA_HOME%\webapps\SV\jsp161.jsp
    に保存する。
  (2)HTMLファイル(hpj161.htm)を作成し、
     %CATALINA_HOME%\webapps\SV\hpj161.htm
    に保存する。
    (3)記録用ファイルは、
     c:\temp\jsp161.dat
    に保存する。事前にフォルダ(c:\temp)を作成しておく。
    (4)URL(http://localhost:8080/SV/hpj161.htm)を指定する。
============================================================================--%>

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

<html>
<head><title>JSP</title></head>
<body>

<%! int count; %>

<%
  request.setCharacterEncoding("JISAutoDetect");           

  if( "登録".equals(request.getParameter("f1")) ) {

    // 複数のスレッドからアクセスされる可能性がある。ひとつのスレッドが
    // インスタンス変数countを更新しているときに、他のスレッドを待たせる
    // ようにsynchronized指定をする。

    synchronized(this) {
 
     try {                                                    
        // 入力ストリームの作成。
        String fname ="c:/temp/jsp161.dat";  
        File f = new File(fname);
        if( f.exists() ) { 
          FileReader fr = new FileReader(fname);         
          BufferedReader br = new BufferedReader(fr);            

          // 読込み。                                              
          String line = br.readLine();
          count = Integer.parseInt(line);
          count++;
          br.close();
        } else {
          count = 1; 
        }

        // 出力ストリームの作成。
        FileWriter w = new FileWriter(fname);
        PrintWriter pw = new PrintWriter(w);
        pw.println(count);
        pw.close();

      } catch( Exception e ) { }
    }
  }
%>

現在の値:<%= count %><br>

</body>
</html>
HTMLファイル(hpj161.htm)
<!-- << hpj161.htm >> -->
<html>
<head><title>JSP</title></head>
<body>
アクセスカウンタ:
<form action=http://localhost:8080/SV/jsp161.jsp method=POST>
  <input type=submit name=f1 value=登録>
</form>
</body>
</html>
実行結果

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


登録をクリック後


URL(http://localhost:8080/SV/jsp161.jsp)を指定後


Webブラウザを閉じた後、再接続
URL(http://localhost:8080/SV/hpj161.htm)を指定後


登録をクリック後


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