「Javaで本格的な仕組みを体験したいけど、何から始めればいいか分からない」
「HTTP通信やWebサーバの仕組みを理解したい」
そんな方におすすめなのが、簡易Webサーバの自作です。
Javaだけで構築できるWebサーバを通じて、ソケット通信・HTTPリクエスト処理・応答生成の仕組みを学ぶことができます。
この記事では、誰でも実装できる簡単なWebサーバの作成方法を、実例コード付きで丁寧に解説いたします。
簡易Webサーバとは何か?
JavaでWebの仕組みを体験できます
結論:JavaでHTTP通信を体験できる最も簡単な方法がWebサーバの自作です。
Webページを見る裏側では、サーバとクライアントがHTTPでやり取りしています。
この仕組みを学ぶには、実際にサーバを作って動かすのが一番理解しやすいです。
Javaなら、ServerSocket
やSocket
といった基本クラスを使って、
コード数百行以内で簡易Webサーバが作成可能です。
Webサーバの基本構造を理解する
サーバは「受け取って返す」だけです
結論:HTTPリクエストを読み取り、HTTPレスポンスを返す構造になっています。
基本的なWebサーバの流れ:
- クライアントからの接続を待つ
- リクエストを受け取る
- 文字列として解析(例:
GET / HTTP/1.1
) - HTMLなどのレスポンスを返す
文部科学省の「情報活用能力」でも、通信の理解は基本スキルとして定義されています(出典:https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm)。
Javaでソケット通信を使う準備
必要なクラスと仕組みを把握しましょう
結論:ServerSocket
とSocket
クラスが中心です。
ServerSocket
:接続を待ち受ける(ポートを開く)Socket
:接続された相手との通信に使うBufferedReader
:クライアントからのリクエストを受信PrintWriter
:レスポンスを返す
実装:簡易Webサーバのコード例
import java.io.*;
import java.net.*;
public class SimpleWebServer {
public static void main(String[] args) throws IOException {
int port = 8080;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Webサーバ起動中(ポート " + port + ")...");
while (true) {
try (Socket clientSocket = serverSocket.accept()) {
System.out.println("クライアント接続:" + clientSocket.getInetAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
// リクエスト読み取り(1行だけ)
String requestLine = in.readLine();
System.out.println("リクエスト:" + requestLine);
// HTTPレスポンスの作成
String response = "<html><body><h1>Java Web Server 起動成功!</h1></body></html>";
out.println("HTTP/1.1 200 OK");
out.println("Content-Type: text/html; charset=UTF-8");
out.println("Content-Length: " + response.getBytes().length);
out.println();
out.println(response);
out.flush();
}
}
}
}
よくあるエラーと対処方法
動かない・表示されない原因はこれです
結論:ポート番号・ブラウザのキャッシュ・リクエスト構文に注意しましょう。
localhost:8080
にアクセスしても動かない → ポートがブロックされていないか確認- ブラウザがキャッシュを使っている → Ctrl+F5で強制再読み込み
- 複数行読み込みしていない場合、ブラウザが応答を受け取れないことも
応用:さらにできること
サーバを発展させて本格的に使ってみよう
おすすめの追加機能:
- 複数のHTMLファイルに対応(
GET /about
など) - スレッド化による並列処理対応
- ファイルシステム連携(静的HTMLファイルの返却)
完成形コードまとめと構成
SimpleWebServer.java
:単一ファイル構成で動作確認が可能
HTMLの知識と組み合わせることで、自作Webページのテスト環境としても活用できます。
まとめ:JavaでWeb通信を体験しよう
この記事では、Javaで作る簡易Webサーバの作成方法をご紹介しました。
学べたこと:
- HTTP通信の基本(リクエストとレスポンス)
ServerSocket
を使ったソケット通信- 実用的なJavaプログラムの構成方法
自分でWebサーバを作る経験は、ネットワークやWebの仕組みの理解を大きく深める一歩になります。
ぜひこの記事を参考に、自分だけのJavaサーバを育ててみてください!