JEP 408,是这次 Java 18 推出的一个比较独立的全新功能点。我们可以通过命令行工具来启动一个提供静态资源访问的迷你 Web 服务器。
jwebserver
这里我简单总结几点,方便大家理解:
- 构建目的是应用于测试与教学,不是为了替代 Jetty、Nginx 等高级服务器
- 不提供身份验证、访问控制或加密等安全功能
- 仅支持 HTTP/1.1,不支持 HTTPS
- 仅支持 GET、HEAD 请求
- 可以通过命令行、Java 类启动
下面我们通过一个构建 HTML 页面的例子,来尝试一下 jwebserver 的功能。
HTML 页面准备
第一步:创建一个文件夹,比如就叫 jwebserver
第二步:创建一个 html 文件,就叫 index.html
吧
第三步:随便写点 HTML 内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello</title> </head> <body> <h1>Hello World</h1> </body> </html>
jwebserver 命令启动
打开终端,输入命令:
$ jwebserver
尝试访问一下 http://127.0.0.1:8000/
,就可以获得之前准备的 HTML 内容了,同时,在终端也看到了请求日志。
关于 jwebserver 还有一些可选的参数,具体有这些:
-h or -? or --help Prints the help message and exits. -b addr or --bind-address addr Specifies the address to bind to. Default: 127.0.0.1 or ::1 (loopback). For all interfaces use -b 0.0.0.0 or -b ::. -d dir or --directory dir Specifies the directory to serve. Default: current directory. -o level or --output level Specifies the output format. none | info | verbose. Default: info. -p port or --port port Specifies the port to listen on. Default: 8000. -version or --version Prints the version information and exits.
其中比较有用的是
-b
:要绑定的 IP 地址-p
:要启动的访问端口-d
:要提供服务的目录-o
:控制台的输出级别
所以一个较为完整的启动命令是这样的:
jwebserver -p 9000 -d / -b 127.0.0.1 -o info
这条命令是一个以根目录 /
启动的服务器,服务端口是 9000,绑定地址是 127.0.0.1,控制台输出级别使用 info。
再尝试访问一下:http://127.0.0.1:9000/
,可以看到根目录 /
下的文件夹和文件:
Java 代码启动
public class Main { public static void main(String[] args) { System.out.println("Hello world!"); var addr = new InetSocketAddress(9000); var server = SimpleFileServer.createFileServer( addr, Path.of("/"), SimpleFileServer.OutputLevel.INFO); server.start(); } }