当前位置:首页 > Java

java如何实现httpserver

2026-03-26 00:23:52Java

使用 Java 原生 com.sun.net.httpserver 包实现

Java 提供了内置的轻量级 HTTP 服务器支持,无需第三方库即可快速实现:

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;

public class SimpleHttpServer {
    public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/", exchange -> {
            String response = "Hello from Java HTTP Server";
            exchange.sendResponseHeaders(200, response.length());
            exchange.getResponseBody().write(response.getBytes());
            exchange.getResponseBody().close();
        });
        server.start();
        System.out.println("Server started on port 8000");
    }
}

基于 HttpExchange 处理请求

通过 HttpExchange 对象可以获取请求信息并构建响应:

server.createContext("/api", exchange -> {
    String method = exchange.getRequestMethod();
    if ("GET".equals(method)) {
        String query = exchange.getRequestURI().getQuery();
        String response = "Processed GET request with query: " + query;
        exchange.sendResponseHeaders(200, response.length());
        exchange.getResponseBody().write(response.getBytes());
    } else {
        exchange.sendResponseHeaders(405, -1); // Method Not Allowed
    }
    exchange.close();
});

添加多路由支持

通过不同上下文路径实现多路由处理:

java如何实现httpserver

server.createContext("/info", exchange -> {
    String info = "Server Info: Java " + System.getProperty("java.version");
    exchange.sendResponseHeaders(200, info.length());
    exchange.getResponseBody().write(info.getBytes());
    exchange.close();
});

server.createContext("/status", exchange -> {
    exchange.getResponseHeaders().set("Content-Type", "application/json");
    String json = "{\"status\":\"running\",\"uptime\":\"10m\"}";
    exchange.sendResponseHeaders(200, json.length());
    exchange.getResponseBody().write(json.getBytes());
    exchange.close();
});

设置线程池控制并发

默认使用单线程,可通过配置线程池提高性能:

ExecutorService threadPool = Executors.newFixedThreadPool(10);
server.setExecutor(threadPool);

处理 POST 请求和请求体

读取 POST 请求的 body 内容:

java如何实现httpserver

server.createContext("/submit", exchange -> {
    if ("POST".equals(exchange.getRequestMethod())) {
        InputStream is = exchange.getRequestBody();
        String body = new BufferedReader(new InputStreamReader(is))
                        .lines().collect(Collectors.joining("\n"));

        String response = "Received: " + body;
        exchange.sendResponseHeaders(200, response.length());
        exchange.getResponseBody().write(response.getBytes());
    }
    exchange.close();
});

添加基本安全限制

实现简单的请求限制和验证:

server.createContext("/secure", exchange -> {
    String auth = exchange.getRequestHeaders().getFirst("Authorization");
    if (!"valid-token".equals(auth)) {
        exchange.sendResponseHeaders(401, -1);
        return;
    }
    // 处理授权通过的请求
});

使用第三方库(如 NanoHTTPD)

对于更复杂的需求,可以考虑轻量级第三方库:

import fi.iki.elonen.NanoHTTPD;

public class NanoServer extends NanoHTTPD {
    public NanoServer() throws IOException {
        super(8080);
        start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
        System.out.println("NanoHTTPD server running");
    }

    @Override
    public Response serve(IHTTPSession session) {
        return newFixedLengthResponse(
            "Hello from NanoHTTPD\n" +
            "URI: " + session.getUri()
        );
    }
}

分享给朋友:

相关文章

vue自动登录如何实现

vue自动登录如何实现

实现自动登录的基本思路 自动登录通常通过结合本地存储(如localStorage或cookie)和token验证机制实现。用户首次登录成功后,服务器返回的认证token会被保存在客户端,下次打开应用时…

如何卸载java

如何卸载java

卸载Java的步骤 Windows系统卸载方法 打开控制面板,选择“程序和功能”或“卸载程序”。在列表中找到Java相关条目(如“Java 8 Update 251”),右键选择卸载并跟随向导完成操…

如何运行java文件

如何运行java文件

运行Java文件的方法 确保已安装Java Development Kit (JDK),可通过命令行输入java -version和javac -version验证安装。 编写Java代码并保存为.…

java如何创建对象

java如何创建对象

创建对象的基本方法 在Java中,创建对象主要通过new关键字调用构造函数完成。基本语法为: ClassName objectName = new ClassName(); 例如创建String对象…

java如何生成随机数

java如何生成随机数

生成随机数的方法 在Java中生成随机数可以通过多种方式实现,以下是几种常见的方法: 使用Math.random()方法 Math.random()方法返回一个double类型的伪随机数,范围在[0…

vue如何实现select

vue如何实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过原生 HTML <select> 元素或使用第三方 UI 库(如 Element UI、Ant Des…