Javaデモ/Servlet「チャット:SPA(Single Page Application)」:「ファイル入出力、ファイル・ロック、AJAX、タイマー」:「RandomAccessFile、FileChannel、Charset、ByteBuffer」(Ver.5)
開発環境はEclipseです。 Eclipseにおいてサーバー・サイド用Javaプロジェクトを作る場合は「動的Web」でプロジェクトを作る必要が有ります。 「動的Web」プロジェクト作成時には、必ず「web.xmlデプロイメント記述子の生成」チェックボックスをチェックしてして下さい(下記参照)。 Webアプリ向け開発手順 http://www.javaroad.jp/opensource/js_eclipse6.htm 現在、文字エンコードは多数ありますが、「UTF-8、Shift_JIS」の2つがインターネットでのデファクト・スタンダードですが、Windowsの場合はShift_JISとは微妙に違うMS932(CP932)がデファクト・スタンダードになります(なのでWindowsにおいてShift_JISと言う場合は、基本的にMS932(CP932)を意味します)。 デモなのでイロイロ手抜きをしています。 レスポンスの遅延を想定して、タイマー処理はsetInterval()では無く、setTimeout()にする、(レスポンスの遅延を想定して)レスポンスが来てからsetTimeout()を設定する。 つまりsetTimeout()を設定する場所はどこでも良いと言う訳では無い。 サーバー・サイドの場合、多数のユーザーが同時にアクセスした場合を考慮する必要があります。 具体的にはサーバー・サイドの場合は、ファイル出力時にファイルをロックしないとデータ破壊される危険性があります。 また ファイルの書き換え(ファイル入力してファイル出力する)は、ファイル入出力を一体としてロックしないとデータ破壊される危険性があります、つまり ファイル入力とファイル出力でファイル・ロックを2つに分けるとファイル・データが破壊される危険性があります。 下記デモでもファイル入力とファイル出力でファイル・ロックは1つだけだと言うことに注意して下さい。 なお (データの削除などで)ファイル・サイズが前より小さくなる場合は「rewind(~)、ftruncate(~,0)」で一旦ファイル・サイズをゼロにする必要があります。 【example\MyServlet.java】 package example; import java.io.BufferedReader; import java.io.F...