「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サーバのコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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サーバを育ててみてください!