类 SimpleFileServer

java.lang.Object
com.sun.net.httpserver.SimpleFileServer

public final class SimpleFileServer extends Object
一个简单的 HTTP 文件服务及其组件(仅用于测试、开发和调试目的)。

一个简单的文件服务由三个组件组成:

  • 绑定到给定地址的 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 服务于文件和目录列表。处理程序仅支持HEADGET请求方法;要处理其他请求方法,可以向服务添加额外的处理程序,或者通过 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
  • 方法详情

    • 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

      public static HttpHandler  createFileHandler(Path  rootDirectory)
      创建一个文件处理程序提供来自给定目录路径(及其子目录)的文件。

      文件处理程序根据给定的 rootDirectory 路径解析请求 URI,以确定关联文件系统上的路径 p 以提供响应。如果路径 p 是一个目录,则响应包含一个目录列表,以 HTML 格式作为响应主体。如果路径 p 是一个文件,则响应包含基于最佳猜测内容类型的“Content-Type”标头,由系统范围 mimeTable 上的 getContentTypeFor 调用确定,以及文件作为响应主体。

      处理程序仅支持带有HEAD或者GET方法,并将用 405 响应代码回复任何其他方法的请求。

      参数:
      rootDirectory - 要服务的根目录,必须是绝对路径
      返回:
      文件处理程序
      抛出:
      IllegalArgumentException - 如果 rootDirectory 不存在、不是绝对目录、不是目录或不可读
      NullPointerException - 如果参数为空
      SecurityException - 如果安装了安全管理器并且拒绝了 rootDirectory 的递归 FilePermission read
    • createOutputFilter

      public static Filter  createOutputFilter(OutputStream  out, SimpleFileServer.OutputLevel  outputLevel)
      创建一个 后处理过滤器 打印关于 交流 的日志消息。日志消息以 UTF-8 编码打印到给定的 OutputStream
      API 注意:
      要不输出任何日志消息,建议不要使用过滤器。
      参数:
      out - 要打印到的流
      outputLevel - 输出电平
      返回:
      后处理过滤器
      抛出:
      IllegalArgumentException - 如果给出 OutputLevel.NONE
      NullPointerException - 如果任何参数为空