本指南将引导您使用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,这意味着可以使用默认的执行器。最后,我们启动服务器并在控制台上打印出消息,以表示服务器已经启动。

使用Java内置HTTP库构建简单的HTTP服务器

原文地址: http://www.cveoy.top/t/topic/olfc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录