java.lang.Object
com.sun.net.httpserver.HttpHandlers
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
-
方法总结
修饰符和类型方法描述static HttpHandlerhandleOrElse(Predicate<Request> handlerTest, HttpHandler handler, HttpHandler fallbackHandler) 用另一个处理程序补充条件HttpHandler。static HttpHandler返回一个HttpHandler,它发送包含给定statusCode、headers和body的响应。
-
方法详情
-
handleOrElse
public static HttpHandler handleOrElse(Predicate <Request > handlerTest, HttpHandler handler, HttpHandler fallbackHandler) 用另一个处理程序补充条件HttpHandler。这个方法创建一个handleOrElse处理程序;一个类似 if-else 的结构。请求与
handlerTest谓词匹配的交易所由handler处理。所有剩余的交换都由fallbackHandler处理。嵌套 handleOrElse 处理程序的示例:
如果存在“Want-Digest”请求标头且请求方法为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);GET,h3handleOrElse 处理程序将交换处理委托给SomeDigestHandler,否则它将交换处理委托给h2处理程序。如果请求方法是GET,则h2handleOrElse 处理程序反过来将交换处理委托给SomeGetHandler,否则它将交换处理委托给h1处理程序。h1处理程序处理之前未委托给SomeGetHandler或SomeDigestHandler的所有交换。- 参数:
handlerTest- 请求谓词handler- 条件处理程序fallbackHandler- 后备处理程序- 返回:
- 处理程序
- 抛出:
NullPointerException- 如果任何参数为空
-
of
返回一个HttpHandler,它发送包含给定statusCode、headers和body的响应。此方法创建一个处理程序,该处理程序在设置响应状态和发送响应之前读取并丢弃请求主体。
headers是响应的有效标头。响应正文字节是UTF-8编码的字节序列body。响应标头 被发送 具有给定的statusCode和正文字节长度(如果正文为空,则为-1)。然后将主体字节作为响应主体发送,除非主体为空,在这种情况下不发送响应主体。- 参数:
statusCode- 响应状态代码headers- 标题body- 响应正文字符串- 返回:
- 处理程序
- 抛出:
IllegalArgumentException- 如果 statusCode 不是正 3 位整数,根据 rfc2616,第 6.1.1 节NullPointerException- 如果标题或正文为空
-