Java 18提供了一个开箱即用的简单Web服务器

155 阅读1分钟

Java 18提供了一个开箱即用的简单Web服务器jwebserver ),只提供静态文件(没有类似Servlet的功能或CGI)。这个工具对原型设计、临时编码和测试非常有用。

要启动该服务器,只需运行:

$ jwebserver
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving C:\Users\fahd\blog and subdirectories on 127.0.0.1 port 8000
URL http://127.0.0.1:8000/

127.0.0.1 - - [31/May/2022:10:37:31 +0100] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [31/May/2022:10:37:33 +0100] "GET /2022/ HTTP/1.1" 200 -

默认情况下,服务器绑定到localhost:8000,并提供当前工作目录。每个请求都会被记录到控制台。

你可以使用下面的选项改变绑定地址、端口号、目录和记录格式:

$ jwebserver --help
Usage: jwebserver [-b bind address] [-p port] [-d directory]
                  [-o none|info|verbose] [-h to show options]
                  [-version to show version information]
Options:
-b, --bind-address    - Address to bind to. Default: 127.0.0.1 (loopback).
                        For all interfaces use "-b 0.0.0.0" or "-b ::".
-d, --directory       - Directory to serve. Default: current directory.
-o, --output          - Output format. none|info|verbose. Default: info.
-p, --port            - Port to listen on. Default: 8000.
-h, -?, --help        - Prints this help message and exits.
-version, --version   - Prints version information and exits.
To stop the server, press Ctrl + C.

要从java应用程序中以编程方式启动Web服务器,你可以使用 [SimpleFileServer.createFileServer](https://docs.oracle.com/en/java/javase/18/docs/api/jdk.httpserver/com/sun/net/httpserver/SimpleFileServer.html#createFileServer(java.net.InetSocketAddress,java.nio.file.Path,com.sun.net.httpserver.SimpleFileServer.OutputLevel))方法:

import java.net.InetSocketAddress;
import java.nio.file.Path;

import com.sun.net.httpserver.SimpleFileServer;
import com.sun.net.httpserver.SimpleFileServer.OutputLevel;

final var server = SimpleFileServer.createFileServer(
                       new InetSocketAddress(8080), 
                       Path.of("C:\\Users\\fahd\\blog"),
                       OutputLevel.VERBOSE);
server.start();

或者使用 [HttpServer.create](https://docs.oracle.com/en/java/javase/18/docs/api/jdk.httpserver/com/sun/net/httpserver/HttpServer.html#create)如果你希望传入你自己的HTTP处理程序和过滤器,可以使用:

import java.net.InetSocketAddress;
import java.nio.file.Path;

import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.SimpleFileServer;
import com.sun.net.httpserver.SimpleFileServer.OutputLevel;

final var server = HttpServer.create(
              new InetSocketAddress(8000),
              10,
              "/context/",
              SimpleFileServer.createFileHandler(Path.of("C:\\Users\\fahd\\blog")),
              SimpleFileServer.createOutputFilter(System.out, OutputLevel.INFO));
server.start();