SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaによる簡易HTTPサーバーの作成

NIOの非ブロック接続を利用した多重IOの実装

Javaによる簡易HTTPサーバーの作成 第4回


ファイル構成

 ダウンロードしたファイルはzipで圧縮してあります。展開すると「httpserver」というディレクトリを頂点としたディレクトリ階層ができます。すぐに実行できるように、コンパイル済みのクラスファイルも添付してあります(ただし、J2SE 5.0を利用しています)。また、ソースファイルはすべてシフトJISでエンコードしています。

「httpserver」ディレクトリ

build.xml

 antのビルドスクリプトです。NetBeans 5.0が生成したファイルですが、コマンドラインからantを利用して操作することも可能です。

 主なターゲットに以下のものがあります。

  • clean
  • ビルドしたクラスファイルを削除。
  • compile
  • 「src」ディレクトリ下のソースファイルをコンパイル。
  • test
  • 「src」および「test」ディレクトリ下のソースファイルをコンパイルしてユニットテストを実行。なお、testターゲットを実行する場合には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] ------------- ---------------- ---------------
    ...
    
  • run:
  • 「src」ディレクトリ下のソースファイルをコンパイルし実行。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」の[終了]をクリックしてください。

次のページ
解説(前半)

この記事は参考になりましたか?

Javaによる簡易HTTPサーバーの作成連載記事一覧

もっと読む

この記事の著者

arton(アートン)

専門は業界特化型のミドルウェアやフレームワークとそれを利用するアプリケーションの開発。需要に応じてメインフレームクラスから携帯端末までダウンサイジングしたりアップサイジングしたりしながらオブジェクトを連携させていくという変化に富んだ開発者人生を歩んでいる。著書に『Ruby③ オブジェクト指向とはじめての設計...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/358 2006/06/14 18:57

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー