类 HttpHandlers

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

public final class HttpHandlers extends Object
HttpHandler 的实现实现了各种有用的处理程序,例如静态响应处理程序,或将一个处理程序与另一个处理程序互补的条件处理程序。

工厂方法 of(int, Headers, String) 提供了一种方法来创建具有预设静态响应状态的处理程序。例如,始终返回的 jsonHandler200使用相同的 json:


  HttpHandlers.of(200,
          Headers.of("Content-Type", "application/json"),
          Files.readString(Path.of("some.json")));
  
或总是回复的 notAllowedHandler405- 方法不允许,并指示允许的方法集:

  HttpHandlers.of(405, Headers.of("Allow", "GET"), "");
  

可以通过使用 handleOrElse 来扩展或增强处理程序的功能,这允许补充给定的处理程序。例如,用 jsonHandler 补充不允许处理程序:


  Predicate<Request> IS_GET = r -> r.getRequestMethod().equals("GET");
  var handler = HttpHandlers.handleOrElse(IS_GET, jsonHandler, notAllowedHandler);
  
以上句柄或其他handler 提供了一个类似 if-else 的结构;如果请求方法是“GET”,则交换处理委托给 jsonHandler ,否则交换处理委托给 notAllowedHandler
自从:
18
  • 方法详情

    • handleOrElse

      public static HttpHandler  handleOrElse(Predicate <Request > handlerTest, HttpHandler  handler, HttpHandler  fallbackHandler)
      用另一个处理程序补充条件 HttpHandler

      这个方法创建一个handleOrElse处理程序;一个类似 if-else 的结构。请求与 handlerTest 谓词匹配的交易所由 handler 处理。所有剩余的交换都由 fallbackHandler 处理。

      嵌套 handleOrElse 处理程序的示例:

      
        Predicate<Request> IS_GET = r -> r.getRequestMethod().equals("GET");
        Predicate<Request> WANTS_DIGEST = r -> r.getRequestHeaders().containsKey("Want-Digest");
      
        var h1 = new SomeHandler();
        var h2 = HttpHandlers.handleOrElse(IS_GET, new SomeGetHandler(), h1);
        var h3 = HttpHandlers.handleOrElse(WANTS_DIGEST.and(IS_GET), new SomeDigestHandler(), h2);
        
      如果存在“Want-Digest”请求标头且请求方法为 GETh3 handleOrElse 处理程序将交换处理委托给 SomeDigestHandler,否则它将交换处理委托给 h2 处理程序。如果请求方法是 GET,则 h2 handleOrElse 处理程序反过来将交换处理委托给 SomeGetHandler,否则它将交换处理委托给 h1 处理程序。 h1 处理程序处理之前未委托给 SomeGetHandlerSomeDigestHandler 的所有交换。
      参数:
      handlerTest - 请求谓词
      handler - 条件处理程序
      fallbackHandler - 后备处理程序
      返回:
      处理程序
      抛出:
      NullPointerException - 如果任何参数为空
    • of

      public static HttpHandler  of(int statusCode, Headers  headers, String  body)
      返回一个 HttpHandler,它发送包含给定 statusCodeheadersbody 的响应。

      此方法创建一个处理程序,该处理程序在设置响应状态和发送响应之前读取并丢弃请求主体。

      headers 是响应的有效标头。响应正文字节UTF-8 编码的字节序列 body 。响应标头 被发送 具有给定的 statusCode 和正文字节长度(如果正文为空,则为 -1 )。然后将主体字节作为响应主体发送,除非主体为空,在这种情况下不发送响应主体。

      参数:
      statusCode - 响应状态代码
      headers - 标题
      body - 响应正文字符串
      返回:
      处理程序
      抛出:
      IllegalArgumentException - 如果 statusCode 不是正 3 位整数,根据 rfc2616,第 6.1.1 节
      NullPointerException - 如果标题或正文为空