・   「Java/XML入門」実習 第9回

応用編(2) ネットワークの利用

最後の実習では、ネットワークを利用した XMLファイルの送受信、 そのためのXMLの活用について考えてみましょう。 簡単なP2Pのファイル共有ツールを作ってみます。


・ 準備1(学内向け):
マシンを立ち上げ、UNIX(Linux)かWindowsのいずれかの環境でログインしなさい。
端末エミュレータのウィンドウ(kterm もしくは Cygwin)を開き、 そこで以下の作業をしてください。

・ 準備2:

今日の作業はディレクトリ xmlshare を作成し、その中で行ってください。 さらに、xmlshare の下に public と private という名前のディレクトリも 作成しなさい。public の下には、この後、ネットワーク上に公開する適当な XMLのファイルを何個かコピーしておいてください。 private の方は空にしておくこと。


---(CLASSPATH)--+-- xmlshare -+- private
                              +- public -+- sample1.xml
                                         +- sample2.xml
                                         +- sample3.xml

・ 準備3:

xmlshare の1つ上(親)に当たるディレクトリ名と、カレントディレクトリを 環境変数 CLASSPATH の中に追加します。 (下の例はホームの直下に xmlshareがある場合)


CLASSPATH=~/:.  ; export CLASSPATH     (UNIX bsh,kshの場合)

export CLASSPATH="z:\;."          (Windows Cygwinの場合)


・ 基本課題1:「HTMLプロトコルによるサーバ」
HTTPプロトコルでファイルの要求を受け付け、その内容を転送します。

  1. ソースファイル SimpleServer.javaを作成しなさい。
  2. コンパイルして実行してみましょう。 (パッケージ名を含むクラスを実行する場合には、 クラス名の前に xmlshare.SimpleServer のように、パッケージ名を 指定してください。うまく起動できない場合は、CLASSPATHの設定が 正しいかどうか確認しなさい。)
  3. 別ウィンドウで前回の XMLTool を起動し、 下記のようにホスト名とポート番号を含むURLを指定してみなさい。 (ファイル名は、publicの下にあるファイル名をどれか1つ指定)

例)  http://pc2f133:8080/sample1.xml

・ 基本課題2:「コンテンツの管理の半自動化」
自分が公開しようとするファイルの一覧を自動的に調べて、 リストを生成します。

  1. ソースファイル ContentManager.javaを作成しなさい。
  2. コンパイルして実行してみましょう。
  3. public ディレクトリ内に list.xml という名前のファイルが 生成されているはずです。その内容も確認しなさい。

・ 基本課題3:「list.xmlファイルのパース」
list.xmlの内容を解析します。

  1. ソースファイル ListParser.javaを作成しなさい。
  2. コンパイルして実行してみましょう。
  3. 提供可能なコンテンツの一覧が表示されることを確認しなさい。

・ 基本課題4:「ファイル選択のGUI」
利用可能なファイル名の一覧から、1個ファイルを選択して ダウンロードの要求を受け付けるGUIを設計します。

  1. ソースファイル FileSelecter.javaを作成しなさい。
  2. コンパイルして実行してみましょう。 実行時に適当な文字列をコマンドラインから引数として与えてください。
  3. もちろん「ダウンロード」のボタンの操作は無効です。 エラーが出ても気にしないでください。

・ 基本課題5:「ダウンロードの実験」
GUI抜きで、ダウンロードの機能のみ作成してみます。

  1. ソースファイル DownLoader.javaを作成しなさい。
  2. コンパイルして実行してみましょう。 実行時にコマンドラインから引数として自分の使用中の「ホスト名」 と「ファイル名」を与えてください。
  3. publicディレクトリから privateディレクトリにファイルが 「ダウンロード」できたことを確認しなさい。

java  xmlshare.DownLoader  pc2f133  sample99.xml

・ 基本課題6:「ホスト名入力のGUI」

  1. ソースファイル HostNameField.javaを作成しなさい。
  2. コンパイルしなさい。
  3. このクラスは単独で実行を確認する機能は省略しました。 次の課題に進みなさい。

・ 基本課題7:「XMLShare ツールの本体」
いよいよ完成です。

  1. ソースファイル XMLShare.javaを作成しなさい。
  2. コンパイルして実行してみましょう。
  3. 他の人と通信し、提供されるファイルのダウンロード し合ってくだしさい。

・ レポート課題:
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。 Subject(件名):は java9 としてください。

  1. 実習時間中に何個のファイルをコピーできましたか?
  2. 実習時間中に何個のファイルをコピーされましたか?

・ 応用課題1:「ツールのさらなる改良」
このツールにはまだ不十分な部分が数多くあります。 以下のような点を修正するにはどうすればいいか考えてみてください。

  1. ポート番号が固定なので融通がきかない。 (ただし、この点は「固定」であることに重要な意味もあるので注意。)
  2. 公開用、ダウンロード用のディレクトリも固定。
  3. そうした設定を設定ファイルの形で管理 できると便利(もちろんXMLの形式で)
  4. 同じファイル名のコンテンツがある時の処理が不十分。
  5. list.xmlの内容がサーバの起動時にのみ読み込まれる。 起動中に追加したコンテンツは反映されない。
  6. P2Pの通信の開始を仲介してくれる、別のサービスが必要。