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();
}