使用Java内置HTTP库构建简单的HTTP服务器
本指南将引导您使用Java内置的HTTP库创建简单的HTTP服务器。此服务器仅接受POST请求和GET请求,并返回请求参数或请求路径。
以下是一个简单的示例代码:
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
public class SimpleHttpServer {
private static final int PORT = 8080;
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(PORT), 0);
server.createContext("/", new RootHandler());
server.setExecutor(null);
server.start();
System.out.println("Server started on port " + PORT);
}
static class RootHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
String requestMethod = exchange.getRequestMethod();
if ("GET".equals(requestMethod)) {
handleGetRequest(exchange);
} else if ("POST".equals(requestMethod)) {
handlePostRequest(exchange);
} else {
exchange.sendResponseHeaders(405, -1);
}
}
private void handleGetRequest(HttpExchange exchange) throws IOException {
String response = "You sent a GET request with path: " + exchange.getRequestURI().getPath();
sendResponse(exchange, response);
}
private void handlePostRequest(HttpExchange exchange) throws IOException {
String requestParameters = getRequestParameters(exchange);
String response = "You sent a POST request with parameters: " + requestParameters;
sendResponse(exchange, response);
}
private String getRequestParameters(HttpExchange exchange) throws IOException {
String request = new String(exchange.getRequestBody().readAllBytes());
Map<String, String> parameters = new HashMap<>();
for (String param : request.split("&")) {
String[] entry = param.split("=");
if (entry.length > 1) {
parameters.put(entry[0], entry[1]);
} else {
parameters.put(entry[0], "");
}
}
return parameters.toString();
}
private void sendResponse(HttpExchange exchange, String response) throws IOException {
exchange.getResponseHeaders().set("Content-Type", "text/plain");
exchange.sendResponseHeaders(200, response.length());
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
这个简单的HTTP服务器有一个根处理程序,它根据请求方法调用 handleGetRequest() 或 handlePostRequest()。对于 GET 请求,它简单地返回请求的路径。对于 POST 请求,它解析请求体中的参数,并返回它们。
在 handlePostRequest() 中,我们使用了 getRequestParameters() 方法来解析请求体中的参数。它首先将请求体转换为字符串,然后使用 split() 方法将其拆分为参数。每个参数都是 name=value 对,我们将它们放入一个 HashMap 中以便稍后处理。最后,我们将参数转换为字符串并返回它们。
在 sendResponse() 方法中,我们设置了响应头的 Content-Type 值为纯文本,并使用 sendResponseHeaders() 方法设置响应码和响应体的长度。然后,我们将响应体转换为字节数组并写入输出流中。
最后,我们使用 HttpServer 类创建一个实例,并向其注册我们的根处理程序。我们设置执行器为 null,这意味着可以使用默认的执行器。最后,我们启动服务器并在控制台上打印出消息,以表示服务器已经启动。
原文地址: http://www.cveoy.top/t/topic/olfc 著作权归作者所有。请勿转载和采集!