当前位置:首页 > 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();
});

添加多路由支持

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

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 内容:

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)

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

java如何实现httpserver

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

分享给朋友:

相关文章

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名.方法名…

如何搭建java环境

如何搭建java环境

下载JDK 访问Oracle官网或OpenJDK官网下载适合操作系统的JDK安装包。推荐选择长期支持版本(如JDK 17或JDK 21)。 安装JDK 运行下载的安装程序,按照向导完成安装。注意…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…

vue如何实现高亮

vue如何实现高亮

实现文本高亮的方法 在Vue中实现文本高亮通常可以通过以下几种方式完成: 使用v-html指令结合字符串替换 通过将需要高亮的文本部分替换为HTML标签(如<span class="highl…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…