@Slf4j
public class SimpleHttpServer
{
private static CountDownLatch endSignal = new CountDownLatch(1);
public static void main(String[] args) {
try {
new SimpleHttpServer().start();
endSignal.await();
} catch (Throwable e) {
log.error("failed in SimpleHttpServer main", e);
}
}
public void start() throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(10183), 0);
server.createContext("/rpl/check", new CheckHandler());
server.createContext("/rpl/download", new DownloadHandler());
server.setExecutor(null);
server.start();
}
class CheckHandler implements HttpHandler {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
try {
String query = httpExchange.getRequestURI().getQuery();
log.info("received check request: {}", query);
Map<String, String> params = queryToMap(query);
for (String key : params.keySet()) {
System.out.println(key + " : " + params.get(key));
}
String response = "succeed";
httpExchange.sendResponseHeaders(200, response.length());
httpExchange.getResponseBody().write(response.getBytes());
httpExchange.getResponseBody().close();
} catch (Throwable e) {
log.error("failed in CheckHandler", e);
throw e;
}
}
}
class DownloadHandler implements HttpHandler {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
try {
String query = httpExchange.getRequestURI().getQuery();
log.info("received downdload request: {}", query);
Map<String, String> params = queryToMap(query);
String filePath = params.get("file");
// send file
File file = new File(filePath);
httpExchange.sendResponseHeaders(200, file.length());
OutputStream outputStream = httpExchange.getResponseBody();
Files.copy(file.toPath(), outputStream);
outputStream.close();
} catch (Throwable e) {
log.error("failed in DownloadHandler", e);
throw e;
}
}
}
private Map<String, String> queryToMap(String query) {
Map<String, String> result = new HashMap<>();
for (String param : query.split("&")) {
String[] entry = param.split("=");
if (entry.length > 1) {
result.put(entry[0], entry[1]);
}else{
result.put(entry[0], "");
}
}
return result;
}
}
一个最简单的 HttpServer
最新推荐文章于 2024-07-28 17:18:51 发布