Javaカスタム単純Httpサーバ


package src.web;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

import com.sun.net.httpserver.HttpServer;

import src.web.HttpServerHandler;

/**
 *      Http   
 */
public class HttpServerHandler implements HttpHandler {

    //       
    public static void Main() {
        try {
            // HttpServer:HttpServer        create     ,
            //      InetSocketAddress     ip      。
            //       int  ,         TCP   ,          ,        。
            int port = 8000;
            String path = "/hello";
            HttpServer httpServer = HttpServer.create(new InetSocketAddress(port), 0);
            // createContext:      ,      url        HttpHandler      ,                               。
            httpServer.createContext(path, new HttpServerHandler());
            // setExecutor:           ,       null     start       。
            httpServer.setExecutor(Executors.newFixedThreadPool(10));
            //      
            httpServer.start();
            System.out.println("      ,    :" + port + ",    :http://localhost:8000" + path);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void handle(HttpExchange httpExchange) {
        try {
            StringBuilder responseText = new StringBuilder();
            responseText.append("    :").append(httpExchange.getRequestMethod()).append("
"); responseText.append(" :").append(getRequestParam(httpExchange)).append("
"); responseText.append(" :
").append(getRequestHeader(httpExchange)); handleResponse(httpExchange, responseText.toString()); } catch (Exception ex) { ex.printStackTrace(); } } /** * * * @param httpExchange * @return */ private String getRequestHeader(HttpExchange httpExchange) { Headers headers = httpExchange.getRequestHeaders(); return headers.entrySet().stream() .map((Map.Entry> entry) -> entry.getKey() + ":" + entry.getValue().toString()) .collect(Collectors.joining("
")); } /** * * * @param httpExchange * @return * @throws Exception */ private String getRequestParam(HttpExchange httpExchange) throws Exception { String paramStr = ""; if (httpExchange.getRequestMethod().equals("GET")) { // GET queryString paramStr = httpExchange.getRequestURI().getQuery(); } else { // GET BufferedReader buffer = new BufferedReader(new InputStreamReader(httpExchange.getRequestBody(), "utf-8")); StringBuilder content = new StringBuilder(); String line = null; while ((line = buffer.readLine()) != null) { content.append(line); } paramStr = content.toString(); } return paramStr; } /** * * * @param httpExchange * @param responsetext * @throws Exception */ private void handleResponse(HttpExchange httpExchange, String responsetext) throws Exception { // html StringBuilder responseContent = new StringBuilder(); responseContent.append("").append("").append(responsetext).append("").append(""); String responseContentStr = responseContent.toString(); byte[] responseContentByte = responseContentStr.getBytes("utf-8"); // , sendResponseHeaders ! httpExchange.getResponseHeaders().add("Content-Type:", "text/html;charset=utf-8"); // , getResponseBody ! httpExchange.sendResponseHeaders(200, responseContentByte.length); OutputStream out = httpExchange.getResponseBody(); out.write(responseContentByte); out.flush(); out.close(); } }

テストコード
    public static void main(final String[] args) {
        HttpServerHandler.Main();
    }