Java 18 版本(2022 年 3 月)中包含的最有用的新功能是“简单 Web 服务器”。除了可以轻松启动和配置 HTTP 文件服务器之外,它还提供了一个 API 来扩展现有的 httpserver 包以实现简单的用例。这个新的简单 Web 服务器是每个 Java 开发人员都应该学习的有用工具。我们来看看有哪些特点。
通过命令行创建简单的 Web 服务器
Java 的新 jwebserver 命令使运行基本 Web 服务器变得简单。它类似于Python中流行的SimpleHTTPServer工具。第一步是运行 Java 18 或更高版本。您可以通过输入 java –version 来检查当前运行的版本。我们建议使用SDKMan来管理您的 JDK 安装。这在多个版本之间切换时特别有用。
使用 Java Simple Web Server 可以做的最基本的事情是在端口 8000 上提供当前目录服务。只需输入<示例1>中的命令即可。
<示例 1> 不带参数的 Web 服务器
$ jwebserver
您可能需要执行一些常见任务来从命
令行微调 Simple Web Server 如,您可 意大利电话号码数据 以更改端口、要绑定的地址(要侦听的网络接口)以及要提供服务的目录。在<示例2>中,您可以看到如何监听8080端口、所有接口以及/foo/bar目录。
您可以使用 $ jwebserver -h 获取所有选项的列表。
正如您所看到的,jwebserver 命令行工具允许您使用尽可能简单的语法来提供静态文件。下一步是查看简单的 Web 服务器 API。
使用简单 Web 服务器 API
简单的 Web 服务器 Javadoc是学习 API 的一个很好的起点。SimpleFileServer 类位于 com.sun.net.httpserver 包中。该软件包还包括用于构建 Web 服务器的较旧的、较低级别的 API。httpserver 包扩展了此功能以满足更简单的需求。jwebserver CLI 工具使用 SimpleFileServer 来执行其功能,也可以通过编程方式使用。
SimpleFileServer 类仅处理 GET 和 但您可以用它做一些
有趣的事情。例如,这篇简单 Web 服务器简介文章展示了如何使用 Google Java 内存文件系统项目为此处理程序模拟文件系统。这里我们使用内存中文件 大胆的数据 系统的概念,并修改SimpleFileServer的FileHandler,以实际提供内存中的虚拟文件系统。接下来,让我们看看通过使用 httpserver 包处理 POST 来将假文件添加到假文件系统的过程。
在内存中提供虚拟文件系统
首先,使用以下命令创建 Maven 项目:
$ mvn archetype:generate -DgroupId=.com.infoworld -DartifactId=jsws -DarchetypeArtifactId=maven-archetype-quickstart
现在使用 CD 导航到新的 /jsws 目录。在 pom.xml 中,将编译器和源版本设置为 18(请参阅此说明)。接下来,将 Google jimfs 添加到依赖项中,如<示例 3> 所示。
<示例4>使用SimpleFileServer提供内存文件系统
<示例4>的想法是使用Google的开源jimfs库模拟一个标准的本地文件系统API ,它 实现了java.nio.file API但在内存中完成所有工作,就像虚拟文件系统一样。该库允许您以编程方式定义自己的目录路径和文件。这将创建自己的虚拟目录结构并将其作为文件处理程序传递给 SimpleFileServer。以编程方式配置 SimpleFileServer,如下所示:
var server = SimpleFileServer.createFileServer(ADDR, root, OutputLevel.VERBOSE);
就像我们在命令行中看到的那样,我们收到要绑定的互联网地址。在这种情况下,它转发未指定的接口和端口 8080,后跟文件系统根。在此示例中,传递使用 createDirectoryHierarchy() 方法创建的 Path 对象。createDirectoryHierarchy() 方法使用 jimfs 构建 Path 对象,如下所示: FileSystem fs = Jimfs.newFileSystem(Configuration.unix()); 然后用文件和目录填充 Path。jimfs API 创建带有路径和内容的文件并不困难。例如,您可以使用 Path hello = foo.resolve(“hello.txt”); 创建它 大多数对象都可以像普通 Java NIO 路径一样使用。
现在,如果您运行此代码并访问 localhost:8080,您可以列出目录、导航到它们并查看文件内容,就像在常规文件服务器上一样。
创建虚拟文件
让我们将这个概念更进一步,添加上传新文件的功能。您可以使用 com.sun.net.httpserver 包接受 POST 请求,将新文件上传到内存文件系统。这段代码可以在<示例5>中看到。
원문보기: