Module jdk.httpserver

Class HttpHandlers

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

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

工厂方法of(int, Headers, String)提供了一种创建具有预设静态响应状态的处理程序的方法。例如,一个总是返回相同json的jsonHandler,状态码始终为200


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

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

处理程序的功能可以通过使用handleOrElse来扩展或增强,该方法允许补充给定的处理程序。例如,将jsonHandlernotAllowedHandler补充:


    Predicate<Request> IS_GET = r -> r.getRequestMethod().equals("GET");
    var handler = HttpHandlers.handleOrElse(IS_GET, jsonHandler, notAllowedHandler);
 
上述的handleOrElse handler提供了类似if-else的结构;如果请求方法是"GET",则将交换的处理委托给jsonHandler,否则将交换的处理委托给notAllowedHandler
自:
18
  • Method Details

    • 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);
       
      h3 handleOrElse处理程序如果存在"Want-Digest"请求头并且请求方法是GET,则将交换的处理委托给SomeDigestHandler,否则将交换的处理委托给h2处理程序。而h2 handleOrElse处理程序将交换的处理委托给SomeGetHandler,如果请求方法是GET,否则将交换的处理委托给h1处理程序。而h1处理程序处理所有未被委托给SomeGetHandlerSomeDigestHandler的交换。
      参数:
      handlerTest - 请求谓词
      handler - 条件处理程序
      fallbackHandler - 回退处理程序
      返回:
      一个处理程序
      抛出:
      NullPointerException - 如果任何参数为null
    • of

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

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

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

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