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