SHOEISHA iD

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

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

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

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

自作HTTPサーバーのマルチスレッド化と動作検証

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


ファイル構成

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

「httpserver」ディレクトリ

build.xml

 antのビルドスクリプトです。NetBeans 4.1が生成したファイルですが、コマンドラインから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:
    -do-test-run:
        [junit] done
      ...
        [junit] Testsuite: com.example.http.HttpServerTest
        [junit] Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 1.582 sec
    
        [junit] ------------- Standard Output ---------------
      ...
        [junit] done
      ...
    
  • run:「src」ディレクトリ下のソースファイルをコンパイルし実行。application.argsプロパティで引数を指定することができます。
  • jar:「dist」ディレクトリ下にjarを作成。

「httpserver\html」ディレクトリ

 テスト用のHTMLを格納してあります。「build.xml」のrunを実行する場合、work.dirプロパティでこのディレクトリをポイントしてください。

「httpserver\nbproject」ディレクトリ

 NetBeans 4.1のプロジェクト設定ファイルが格納されています。

「httpserver\src\com\example\http」ディレクトリ

  • HttpServer.java
  • 本記事で取り上げる簡易HTTPサーバーのソースファイルです。
  • ClientService.java
  • HttpServerクラスが利用するクライアントとの接続を制御する機構のソースファイルです。
  • Authority.java
  • HttpServerクラスが利用する認証機構のソースファイルです。
  • Base64Util.java
  • Base64でエンコードされたバイナリデータをデコードするユーティリティです。

「httpserver\test\com\example\http」ディレクトリ

  • HttpServerTest.java
  • 簡易HTTPサーバーのテストプログラムのソースファイルです。

実行方法

 前回までと異なり、スレッドの利用方法をプロパティで切り替える必要があるため、コマンドラインから以下のように生成したjarを指定して実行してください。

実行例

C:\test\httpserver>java -Dhttpsrv.thread=m -jar dist\httpserver.jar -d
service type=multi thread

 実行するとデフォルトではポート8800番でサービスを開始します。スレッドの利用方法はhttpsrv.threadプロパティで指定します。設定値と動作の関係は以下となります。

設定値動作
m単純なマルチスレッド
pスレッドプール
sシングルスレッド(前回までの実装と同等)

 なお、無設定時のデフォルトはスレッドプールとなり、m、p以外の値を与えるとシングルスレッドを指定したものと見なします。

 引数として-dを与えると、デバッグモードで実行されるため、サービス開始時に選択された動作を標準出力へ出力します(上記の実行例の「service type=multi thread」という出力がそれにあたります)。

 終了するには、Webブラウザで「http://localhost:8800/quit」を開くか、またはコマンドラインで[Ctrl]+Cを押下してください。

次のページ
解説(前半)

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

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

もっと読む

この記事の著者

arton(アートン)

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー