JavaのServerSocketを使って簡易的なHttpServerを作ってみるサンプルです。HTTPは通常ポート番号80で待機しますが、今回は実験でもあるのでポート番号12435で待機させています。ブラウザからアクセスするときは http://127.0.0.1:12435 というように最後にポート番号をつけてアクセスします。try-with-resources文を積極的に使っていきましょう。HTMLの内容は自分で変えて遊んでみましょう。次回はもう少し頑張ったサーバーにしてみます。

import java.net.Socket;
import java.net.ServerSocket;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import java.io.PrintWriter;
import java.io.BufferedOutputStream;

import java.nio.charset.StandardCharsets;

import java.io.IOException;

public class HttpServerSample{
    public static void main(String... args){
        //ポート12435でServerSocket作成
        try(var server = new ServerSocket(12435)){
            HttpServerSample.accept(server);
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    private static void accept(ServerSocket server){
        while(true){
            //クライアントからの接続を待機する
            try(var socket = server.accept()){
                //クライアントから接続されたときの処理
                HttpServerSample.connectHttp(socket);
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }

    private static void connectHttp(Socket socket) throws IOException{
        try(
            var in = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8));
            var out = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()), true);
        ){
            String line;

            while((line = in.readLine()) != null){
                System.out.println(line);

                if(line.isEmpty()){
                    break;
                }
            }
            
            out.println("HTTP/1.1 200 OK");
            out.println("Content-Type: text/html");
            out.println();
            
            //ここでHTMLを送信する
            out.println("<span style=\"color:red\">Hello World</span>");
        }
    }
}