一个简单的文件服务由三个组件组成:
- 绑定到给定地址的
HttpServer, - 一个
HttpHandler提供来自给定目录路径的文件,以及 - 一个可选的
Filter打印与服务处理的交换相关的日志消息。
简单文件服务
createFileServer 静态工厂方法返回一个 HttpServer ,它是一个简单的开箱即用文件服务。服务附带一个初始处理程序,该处理程序为给定目录路径(及其子目录)中的文件提供服务。输出级别决定将哪些日志消息打印到 System.out(如果有)。
一个简单的文件服务的例子:
var addr = new InetSocketAddress(8080);
var server = SimpleFileServer.createFileServer(addr, Path.of("/some/path"), OutputLevel.INFO);
server.start();
文件处理程序
createFileHandler 静态工厂方法返回一个 HttpHandler 服务于文件和目录列表。处理程序仅支持HEAD和GET请求方法;要处理其他请求方法,可以向服务添加额外的处理程序,或者通过 HttpHandlers.handleOrElse(Predicate, HttpHandler, HttpHandler) 组合单个处理程序来补充文件处理程序。
组成单个处理程序的示例:
var handler = HttpHandlers.handleOrElse(
(req) -> req.getRequestMethod().equals("PUT"),
(exchange) -> {
// validate and handle PUT request
},
SimpleFileServer.createFileHandler(Path.of("/some/path")))
);
输出过滤器
createOutputFilter 静态工厂方法返回一个 post-processing filter 打印与服务处理的交换相关的日志消息。输出格式由 outputLevel 指定。
输出过滤器示例:
var filter = SimpleFileServer.createOutputFilter(System.out, OutputLevel.VERBOSE);
var server = HttpServer.create(new InetSocketAddress(8080), 10, "/some/path/", new SomeHandler(), filter);
server.start();
jweb服务工具
jwebserver 工具提供了一个简单的 HTTP 文件服务实现。
- 工具指南:
- jwebserver
- 自从:
- 18
-
内部类总结
内部类 -
方法总结
修饰符和类型方法描述static HttpHandlercreateFileHandler(Path rootDirectory) 创建一个文件处理程序提供来自给定目录路径(及其子目录)的文件。static HttpServercreateFileServer(InetSocketAddress addr, Path rootDirectory, SimpleFileServer.OutputLevel outputLevel) 创建一个文件服务从给定路径提供文件。static FiltercreateOutputFilter(OutputStream out, SimpleFileServer.OutputLevel outputLevel)
-
方法详情
-
createFileServer
public static HttpServer createFileServer(InetSocketAddress addr, Path rootDirectory, SimpleFileServer.OutputLevel outputLevel) 创建一个文件服务从给定路径提供文件。服务配置了一个初始上下文,该上下文将 URI
path映射到文件处理程序.这文件处理程序如同通过调用createFileHandler(rootDirectory)创建,并且关联到如同通过调用createContext("/")创建的上下文。返回的服务未启动。可以给出一个输出级别来打印与服务处理的交换有关的日志消息。日志消息(如果有)打印到
System.out。如果给出OutputLevel.NONE,则不会打印任何日志消息。- 参数:
addr- 要收听的地址rootDirectory- 要服务的根目录,必须是绝对路径outputLevel- 日志消息输出级别- 返回:
- 一个 HttpServer
- 抛出:
IllegalArgumentException- 如果根目录不存在、不是绝对目录、不是目录或不可读UncheckedIOException- 如果发生 I/O 错误NullPointerException- 如果任何参数为空SecurityException- 如果安装了安全管理器并且拒绝了 rootDirectory 的递归FilePermission“read”
-
createFileHandler
创建一个文件处理程序提供来自给定目录路径(及其子目录)的文件。文件处理程序根据给定的
rootDirectory路径解析请求 URI,以确定关联文件系统上的路径p以提供响应。如果路径p是一个目录,则响应包含一个目录列表,以 HTML 格式作为响应主体。如果路径p是一个文件,则响应包含基于最佳猜测内容类型的“Content-Type”标头,由系统范围mimeTable上的 getContentTypeFor 调用确定,以及文件作为响应主体。处理程序仅支持带有HEAD或者GET方法,并将用
405响应代码回复任何其他方法的请求。- 参数:
rootDirectory- 要服务的根目录,必须是绝对路径- 返回:
- 文件处理程序
- 抛出:
IllegalArgumentException- 如果 rootDirectory 不存在、不是绝对目录、不是目录或不可读NullPointerException- 如果参数为空SecurityException- 如果安装了安全管理器并且拒绝了 rootDirectory 的递归FilePermission“read”
-
createOutputFilter
- API 注意:
- 要不输出任何日志消息,建议不要使用过滤器。
- 参数:
out- 要打印到的流outputLevel- 输出电平- 返回:
- 后处理过滤器
- 抛出:
IllegalArgumentException- 如果给出OutputLevel.NONENullPointerException- 如果任何参数为空
-