当前位置: 首页 > 面试题库 >

码头:如何嵌套HandlerWrapper,HandlerList和ContextHandlerCollection,以及ContextHandler

巫马瀚漠
2023-03-14
问题内容

我正在尝试在Jetty上构建一个api服务器。

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

本质上,我有一个HandlerWrapper,其中包含ContextHandlerCollections的HandlerList,实际上它只是在执行以下操作:

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.List子处理程序执行顺序的专用HandlerCollection

ContextHandler -专门的HandlerWrapper,仅在请求上下文路径和虚拟主机匹配时才执行其包装的Handler。

ContextHandlerCollection-的HashMap
ContextHandler将仅执行与请求上下文路径(和虚拟主机)匹配的那些子处理程序(在集合中)



 类似资料:
  • 我按照http://spring.io/guides/gs/consulting-rest/使用rest服务。本教程只提到一个单层JSON文件。但是,我希望解析一个json 当我通过spring-boot run运行该命令时,我在命令行中得到以下结果: 有什么我没看到的吗?

  • 我有一个相当典型的场景,其中有一个main@实体,他内部的所有内容都是可嵌入的(因此,没有父实体,内部的所有内容都没有意义)。现在JPA 2.0阻止我在另一个@ElementCollection中定义的@Embeddeble中嵌套一个@ElementCollection: JSR-317 2.6可嵌入类和基本类型的集合包含在元素集合中的可嵌入类(包括另一个可嵌入类中的可嵌入类)不得包含元素集合,也

  • 我正在构建一个搜索查询,它将一组约束()动态地添加到查询中。一般预期结构如下 换句话说,我有一组(一个或多个)必须全部满足的条件(上面的)。可能有几个这样的集合,其中任何一个都足以进行最后的匹配(上面的)。 这种结构的一个示例,由我的代码生成(这是完整的API查询,生成的部分是): 我对这个查询的理解是: 如果和 或 如果 条目将匹配 不幸的是,我把Elasticsearch称为错误 这个错误是什

  • 问题内容: 在此博客中,他为回调地狱提供了此示例(复制/粘贴以下代码)。但是,没有提到如何通过使用Reactive Extensions来解决此问题。 因此,此处F3取决于F1完成,而F4和F5取决于F2完成。 想知道Rx中的功能等同于什么。 如何在Rx中表示F1,F2,F3,F4和F5应该全部异步拉? 注意: 我目前正在尝试绕过Rx,所以在提出这个问题之前,我没有尝试解决此示例。 问题答案: 我

  • 使用Laravel 5.6,我试图从MySQL类别表中显示子类别的子类别。我想传递这个名字,并获得它的所有子类,而不管父类是什么。 类别表 期望结果 return App\Category::where('name','Child-1-P-2'))-

  • 问题内容: 你能告诉我为什么以下在Postgres sql中不起作用吗?: 更新: 我希望查询返回“ 0.30”作为浮点数。此构造仅用于测试目的,我有一些依赖于此条件结构的复杂查询。但是我不知道如何解决它。 结果是: 更新: 这种构造出现在函数中…所以我想做以下事情: 错误消息请参见上面。 问题答案: Postgres中没有用于普通SQL查询的语法。由于没有MySQL中的功能,因此必须使用: