Jetty:如何嵌套HandlerWrapper、HandlerList、ContextHandlerCollection和ContextHandler[英] Jetty: How to nest HandlerWrapper, HandlerList, and ContextHandlerCollection, and ContextHandler

问题描述

我正在尝试在Jetty上构建API服务器.

我想在看起来像/apis/api1/endpoint,/api/api2/endpoint,/api/api3/endpoint等的路由上有多个API

从本质上讲,我有一个HandlerWrapper,其中包含contexThandLercollections的处理列表,本质上只是:

public void handle(...) {
    if (uri.startsWith("/apis/")) {
        log.info("This is an api request");
        this.getHandlerList.handle(...)
    } else {
        super.handle()
    }
}

private HandlerList getHandlerList() {
    HandlerList handlerList = new HandlerList();
    ContextHandlerCollection contextHandlerCollection = new ContextHandlerCollection();
    ContextHandler api1 = new ContextHandler("/apis/api1/endpoint");
    api1.setHandler(new Api1Handler());
    contextHandlerCollection.addHandler(api1);
    handlerList.addHandler(contextHandlerCollection);
    return handlerList
}

现在我尝试这样做:

curl localhost:port/apis/api1/endpoint

我找不到404,但我在日志中看到语句"这是一个API请求".

有任何提示?

我基本上想要每个API1,API2等的一个contexThandLercollection,并且contexThandLercollection应由一组特定于端点的处理程序组成.

.

我缺少什么?

欢呼,

推荐答案

Handler - 处理请求的基本形式,除非您致电request.setHandled(true)

,否则它不是请求处理的终端点

HandlerWrapper - 可以执行一些处理并确定是否应该将请求交给嵌套(包裹)处理程序的处理程序.

HandlerCollection - 遵循有关执行订单的标准Java收集规则的处理程序集合.收集中的每个处理程序要执行,直到其中一个调用request.setHandled(true)

HandlerList - 遵循Java.util的专门处理.

ContextHandler - 一个专业的处理程序,仅在请求上下文和虚拟主机匹配时才执行包装处理程序.

ContextHandlerCollection - ContextHandler的hashmap只能执行与请求上下文匹配(和虚拟主机)匹配的那些子处理器(在集合中)

本文地址:https://www.itbaoku.cn/post/978574.html