はじめに
今回の記事では、Javaを使って手軽にWEBサーバを構築する方法について解説します。
具体的には、jwebserverというツールを用いてWEBサーバを立ち上げるプログラムの説明と、その動作確認を行います。
WEBアプリケーションの開発に興味がある方は、この記事をぜひ参考にしてみてください。
jwebserverとは
jwebserverとは、Javaを使用して手軽にWebアプリケーションを開発するための簡易なWebサーバです。
jwebserverを使うことで、手軽にローカル環境や小規模なプロジェクトのためのWEBサーバを構築することができます。
jwebserverの特徴は以下になります。
- シンプルな設定
jwebserverは、起動時にポート番号とパスを指定するだけで、Webサーバを起動することができます。 - 軽量
jwebserverは非常に軽量で、Spring Bootなどの代表的なWEBサーバーに比べて設定が簡単で起動が迅速です。
そのため、比較的小規模なプロジェクトやローカル環境での開発に向いています。
総じて、jwebserverは大規模な開発には向いていませんが、個人開発や小規模開発には適しています。非常に簡単に構築できますので、これからjwebserverの基本的なプログラム構成について詳しく見ていきましょう!
jwebserverを使った簡易WEBサーバの構築
ここでは、jwebserverを使った簡易WEBサーバのプログラムとその動作の確認を行います。
その後、プログラムの詳細な説明をします。
プログラムの全体
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class SimpleServer {
public static void main(String[] args) throws IOException {
int port = 8080;
// HTTPサーバーを指定のポートで作成
HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
// ルートコンテキストへのハンドラを追加
server.createContext("/", new RootHandler());
// "/dashboard" パスへのハンドラを追加
server.createContext("/dashboard", new DashboardHandler());
// サーバーを起動
server.start();
System.out.println("Server is running on port " + port);
}
// ルートコンテキスト用のハンドラ
static class RootHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
String response = "Hello, World!"; // ルートパス("/") へのアクセスに対するメッセージ
// レスポンスを送信
exchange.sendResponseHeaders(200, response.length());
}
}
// "/dashboard" パス用のハンドラ
static class DashboardHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
String response = "Welcome to the Dashboard page!"; // "/dashboard" へのアクセスに対するメッセージ
// レスポンスを送信
exchange.sendResponseHeaders(200, response.length());
}
}
}
動作確認
コンソール
Server is running on port 8080
コンソールには、WEBサーバのリッスンポートが出力されます。
今回は、8080ポートでリッスン(待機)しています。
ルートページ
ルートページ「http://localhost:8080」にアクセスすると、「Hello, World!」が画面に表示されます。
ダッシュボードページ
ダッシュボードページ「http://localhost:8080/dashboard」にアクセスすると、「Welcome to the Dashboard page!」が画面に表示されます。
プログラムの説明
WEBサーバのポート設定
int port = 8080;
// HTTPサーバーを指定のポートで作成
HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
変数portに、WEBサーバがリッスンするポート番号を設定しています。
この例では、ポート番号「8080」が使用されています。
HttpServer.createメソッドは、指定されたポート番号で新しいWEBサーバを生成します。
このWEBサーバは指定されたポートでリクエストを受け付け、応答を返します。
このメソッドの第二引数である0(ゼロ)は、WEBサーバが同時に処理できるリクエストの最大数を表しています。
0の場合、WEBサーバは一度に 1 つのリクエストを処理できます。
この値を1に設定した場合、WEBサーバは同時に 2 つのリクエストを処理できるようになります。
今回は、ローカル環境で構築するため、0に設定しました。
パスの設定
// ルートコンテキストへのハンドラを追加
server.createContext("/", new RootHandler());
// "/dashboard" パスへのハンドラを追加
server.createContext("/dashboard", new DashboardHandler());
createContextメソッドを使用して、URLのパスを設定します。
第1引数にURLのパスを設定し、第2引数には第1引数に設定したパスへのリクエスト処理を記述します。
この例では、「”/”」および「”/dashboard”」の2つのURLパスを設定しています。
サーバーを起動
// サーバーを起動
server.start();
startメソッドを呼び出すことで、事前に設定したポート番号やリクエストハンドラが有効になり、サーバが起動します。
リクエストハンドラの記述
// ルートコンテキスト用のハンドラ
static class RootHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
// ルートコンテキストへのリクエスト処理を記述します。
}
}
createContextメソッドの第2引数で設定したリクエストハンドラの中身を記述します。
「”/”」のリクエストハンドラを記述する場合、HttpHandlerインターフェースを実装するRootHandlerクラスをリクエストハンドラとして作成します。
handleメソッド内には、引数HttpExChangeクラスを通じて、クライアントからのリクエストの受け取りやサーバへのレスポンス処理を記述します。
レスポンスを送信
String response = "Hello, World!"; // ルートパス("/") へのアクセスに対するメッセージ
// レスポンスヘッダを送信
exchange.sendResponseHeaders(200, response.length());
sendResponseHeadersメソッドで、ステータスラインやHTTPレスポンスヘッダの情報を設定して、それをクライアントに送信します。
この例では、ステータスコードを200、HTTPレスポンスヘッダには、Content-Typeが”text/plain”として設定され、変数responseの情報がレスポンスとして返されています。
JavaによるWebサーバの設定についての説明は以上になります。
非常に簡単なため、WEBアプリを作成したいという初心者の方は、jwebserverでサーバーを一度立ち上げてみることをお勧めします。
ここまでお読みいただき、ありがとうございました。
また、次回の記事でお会いしましょう!!
コメント