Java のシンプルな Web サーバーの紹介

ブログ

ホームページホームページ / ブログ / Java のシンプルな Web サーバーの紹介

Sep 02, 2023

Java のシンプルな Web サーバーの紹介

マシュー・タイソン著、InfoWorld | ソフトウェア アーキテクト Java 18 リリース (2022 年 3 月) に含まれる最も便利な新機能の 1 つは、新しい Simple Web Server でした。

マシュー・タイソン著

ソフトウェアアーキテクト、InfoWorld |

Java 18 リリース (2022 年 3 月) に含まれる最も便利な新機能の 1 つは、HTTP ファイル サーバーの起動と構成を簡単にする新しい Simple Web サーバーです。 また、単純なユースケースを構築するために既存の httpserver パッケージを拡張する API も公開します。 新しい Simple Web Server は、すべての Java 開発者が必需品のバッグに入れておくべき便利なツールです。 それをチェックしよう!

Java の新しい jwebserver コマンドを使用すると、基本的な Web サーバーを簡単に実行できます。 これは、Python の世界で人気のある SimpleHTTPServer ツールに似ています。

最初のステップは、Java 18 以降のリリースを実行していることを確認することです。 「java --version」と入力して、現在実行しているリリースを確認します。 JDK インストールを管理するには SDKMan を使用することをお勧めします。 これは、複数のバージョンをジャグリングする場合に特に便利です。

Java Simple Web Server で実行できる最も基本的なことは、ポート 8000 で現在のディレクトリを提供することです。リスト 1 に示すコマンドを入力するだけです。

そこから、ブラウザに移動して localhost:8000 にアクセスすると、図 1 に示すように、ファイル システムのリストが表示されます。

コマンドラインで Simple Web Server を微調整するには、実行する必要がある一般的な作業がいくつかあります。 たとえば、ポート、バインド先のアドレス (リッスンするネットワーク インターフェイス)、およびサービスを提供するディレクトリを変更できます。

リスト 2 では、ポート 8080、すべてのインターフェイス、および /foo/bar ディレクトリでリッスンする方法を示しています。

ご覧のとおり、jwebserver コマンドライン ツールを使用すると、最も単純な構文を使用して静的ファイルを提供できます。 次に、Simple Web Server API を見ていきます。

Simple Web Server Javadoc は、API について学習するための良い出発点となります。 SimpleFileServer クラスは、com.sun.net.httpserver パッケージに存在します。 (このパッケージには、Web サーバーを構築するための古い、より低レベルの API も含まれています。httpserver パッケージは、より単純な要件に合わせてその機能を拡張します。) jwebserver CLI ツールは、SimpleFileServer を使用してその作業を実行しますが、プログラムで使用することもできます。

SimpleFileServer クラスは GET と HTTP/1.1 のみを処理します。 ただし、これを使っていくつかの興味深いことができます。 たとえば、Simple Web Server の操作に関するこの概要では、Google Java インメモリ ファイル システム プロジェクトを使用して、ハンドラー用のファイル システムを偽装する方法を提案しています。

インメモリ ファイル システムの考え方を使用して、SimpleFileServer の FileHandler を変更して、実際にメモリから仮想ファイル システムを提供できるようにします。 次に、httpserver パッケージを使用して POST を処理し、疑似ファイル システムに疑似ファイルを追加します。

まず、次のコマンドを使用して簡単な Maven プロジェクトを作成しましょう。

ここで、新しい /jsws ディレクトリに CD で移動します。

ここで説明されているように、pom.xml でコンパイラとソースのバージョンを 18 に設定します。

次に、リスト 3 に示すように、Google jimfs を依存関係に追加します。

これで、src/main/java/App.java ファイルを変更して、偽のファイル システムを提供できるようになりました。 これを行うコードをリスト 4 に示します。

リスト 4 のアイデアは、Google のオープンソース jimfs ライブラリを使用して標準のローカル ファイル システム API をシミュレートすることです。このライブラリは java.nio.file API を実装していますが、仮想ファイル システムのようにすべてをメモリ内で実行します。 ライブラリを使用すると、独自のディレクトリ パスとファイルをプログラムで定義できます。 そこで、独自の仮想ディレクトリ構造を作成し、それをファイル ハンドラーとして SimpleFileServer に渡します。

SimpleFileServer クラスをプログラムで構成します。

コマンドラインで見たのと同じように、これはバインド先のインターネットアドレスを受け入れます。 この場合、未指定のインターフェイスとポート 8080 を渡します。その後にファイル システムのルートが続きます。 この例では、createDirectoryHierarchy() メソッドによって作成された Path オブジェクトをそれに与えます。