ファイル構成
ダウンロードしたファイルはzipで圧縮してあります。展開すると「httpserver」というディレクトリを頂点としたディレクトリ階層ができます。すぐに実行できるように、コンパイル済みのクラスファイルも添付してあります(ただし、J2SE 5.0を利用しています)。また、ソースファイルはすべてシフトJISでエンコードしています。
「httpserver」ディレクトリ
build.xml
antのビルドスクリプトです。NetBeans 5.0が生成したファイルですが、コマンドラインからantを利用して操作することも可能です。
主なターゲットに以下のものがあります。
- clean:
- compile:
- test:
- run:
libs.junit.classpathプロパティで「junit.jar」を指定する必要があります。C:\test\httpserver>ant test -Dlibs.junit.classpath=%JUNIT_HOME%\junit.jar Buildfile: build.xml -pre-init: ... -do-test-run: [junit] done [junit] Testsuite: com.example.http.HttpServerTest [junit] Tests run: 4, Failures: 0, Errors: 0, Time elapsed:
0.482 sec [junit] ------------- Standard Output --------------- [junit] done [junit] ------------- ---------------- --------------- ...
application.argsプロパティで引数を指定することができます。「httpserver\html」ディレクトリ
テスト用のHTMLを格納してあります。「build.xml」のrunを実行した場合のワークディレクトリは、ここを設定しています。
コマンドラインからjarを実行する場合は、このディレクトリをカレントディレクトリとして次のように実行してください。
java -jar ../dist/httpserver.jar
このディレクトリには、テスト用に400バイト弱の「index.html」と、480KBの「index.htm」の2つのファイルを含んでいます。特に「index.htm」のほうは、1度のIOではクライアントへの送信が完了しないため、非ブロッキングIOの動作を確認するために利用できます。
「httpserver\nbproject」ディレクトリ
NetBeans 5.0のプロジェクト設定ファイルが格納されています。
「httpserver\src\com\example\http」ディレクトリ
HttpServer.java
本記事で取り上げる簡易HTTPサーバーのソースファイルです。ServerSocketChannelとセレクション処理の実装を含みます。
Request.java
クライアントからのリクエストを処理するクラス(記事内ではリクエストハンドラと呼びます)のソースファイルです。NIOの特徴の1つであるBufferを利用したコードと、非ブロックIOを利用したコードを含みます。
Authority.java
HttpServerクラスが利用する認証機構のソースファイルです。このファイルについては第2回目を参照してください。
Base64Util.java
Base64でエンコードされたバイナリデータをデコードするユーティリティです。
「httpserver\test\com\example\http」ディレクトリ
HttpServerTest.java
簡易HTTPサーバーのテストプログラムのソースファイルです。
実行方法
NetBeans 5.0のプロジェクトのコンテキストメニューから[プロジェクトを実行]をクリックするか、またはコマンドラインから次のように実行します。
C:\test\httpserver>ant run -Dapplication.args=-d Buildfile: build.xml ... compile: run:
実行を開始すると、デフォルトのポート8800番でサービスを開始します。
実行時に-dを指定(ant利用時は「-Dapplication.args=-d」と指定)すると、デバッグモードで実行され、標準出力にクライアントからのリクエスト情報などを出力します。
終了するには、Webブラウザで「http://localhost:8800/quit」を開くか、または「index.html」または「index.htm」の[終了]をクリックしてください。

\junit.jar
Buildfile: build.xml
-pre-init:
...
-do-test-run:
[junit] done
[junit] Testsuite: com.example.http.HttpServerTest
[junit] Tests run: 4, Failures: 0, Errors: 0, Time elapsed: