java.lang.Object
com.sun.net.httpserver.HttpHandlers
实现了实现各种有用处理程序的
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
来扩展或增强,该方法允许补充给定的处理程序。例如,将jsonHandler
与notAllowedHandler补充:
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 Summary
Modifier and TypeMethodDescriptionstatic HttpHandler
handleOrElse
(Predicate<Request> handlerTest, HttpHandler handler, HttpHandler fallbackHandler) 用另一个处理程序补充条件HttpHandler
。static HttpHandler
返回一个HttpHandler
,该处理程序发送包含给定statusCode
、headers
和body
的响应。
-
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
处理程序处理所有未被委托给SomeGetHandler
或SomeDigestHandler
的交换。- 参数:
-
handlerTest
- 请求谓词 -
handler
- 条件处理程序 -
fallbackHandler
- 回退处理程序 - 返回:
- 一个处理程序
- 抛出:
-
NullPointerException
- 如果任何参数为null
-
of
返回一个HttpHandler
,该处理程序发送包含给定statusCode
、headers
和body
的响应。此方法创建一个处理程序,在设置响应状态并发送响应之前读取并丢弃请求体。
headers
是响应的有效头部。响应正文字节是body
的UTF-8
编码字节序列。响应头部将使用给定的statusCode
和正文字节的长度(如果正文为空,则为-1
)发送。然后将正文字节作为响应正文发送,除非正文为空,在这种情况下不发送响应正文。- 参数:
-
statusCode
- 响应状态码 -
headers
- 头部 -
body
- 响应正文字符串 - 返回:
- 一个处理程序
- 抛出:
-
IllegalArgumentException
- 如果statusCode不是正的3位数整数,根据rfc2616,第6.1.1节 -
NullPointerException
- 如果头部或正文为null
-