【Java】jwebserverで簡易Webサーバを立ち上げる簡単な方法

スポンサーリンク

はじめに

今回の記事では、Javaを使って手軽にWEBサーバを構築する方法について解説します。

具体的には、jwebserverというツールを用いてWEBサーバを立ち上げるプログラムの説明と、その動作確認を行います。

WEBアプリケーションの開発に興味がある方は、この記事をぜひ参考にしてみてください。
 

jwebserverとは

jwebserverとは、Javaを使用して手軽にWebアプリケーションを開発するための簡易なWebサーバです。

jwebserverを使うことで、手軽にローカル環境や小規模なプロジェクトのためのWEBサーバを構築することができます。

jwebserverの特徴は以下になります。

  1. シンプルな設定
    jwebserverは、起動時にポート番号とパスを指定するだけで、Webサーバを起動することができます。
  2. 軽量
    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でサーバーを一度立ち上げてみることをお勧めします。

ここまでお読みいただき、ありがとうございました。
また、次回の記事でお会いしましょう!!

Javaアプリケーション
はじめまして
blueze

企業でアプリ開発をしているJavaプログラマーです。
当ブログでは、Javaを中心にIT系の発信をしています。
取得資格:Java Gold、AWS CLF、教育免許
趣味:将棋、野球、ゲーム

bluezeをフォローする
bluezeをフォローする
一緒に学ぶエンジニア

コメント

タイトルとURLをコピーしました