You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Jetty 11迁移至Jetty 12:HandlerList缺失后的处理器配置咨询

Jetty 11 → 12 处理器配置适配方案

核心替换:用HandlerCollection替代HandlerList

Jetty 12 移除了HandlerList,但它的父类HandlerCollection完全继承了原有功能——按添加顺序依次调用所有处理器,直接替换就能复用原来的多处理器配置逻辑。

资源路径API调整

Jetty 12 删掉了setBaseResourceAsString方法,得改用ResourceFactory来创建资源实例:

// 替换原来的setBaseResourceAsString(resource_base)
static_handler.setBaseResource(ResourceFactory.of(server).newResource(resource_base));

ResourceFactory是Jetty 12里统一管理资源的入口,不管是文件系统路径还是classpath资源都能处理。

修改后的完整代码

static private void set_jetty_handlers(Server server)
{
    ...
    // 替换HandlerList为HandlerCollection
    HandlerCollection handlers = new HandlerCollection();

    // 静态资源处理器配置
    ServletContextHandler static_handler = new ServletContextHandler();
    static_handler.insertHandler(new GzipHandler());
    static_handler.setContextPath("/");
    static_handler.setBaseResource(ResourceFactory.of(server).newResource(resource_base));
    ...

    // 自定义处理器配置(继承自ResourceHandler)
    My_jetty_handler my_handler = new My_jetty_handler();
    my_handler.setWelcomeFiles(new String[] { ... });
    my_handler.setBaseResource(ResourceFactory.of(server).newResource(resource_base));
    my_handler.setCacheControl(MAX_AGE);

    ...
    // 给自定义处理器添加Gzip支持
    GzipHandler my_handler_gzip = new GzipHandler();
    my_handler_gzip.addIncludedMimeTypes(...);
    my_handler_gzip.setHandler(my_handler);
    handlers.addHandler(my_handler_gzip);

    handlers.addHandler(static_handler);

    // 别名支持配置
    ContextHandler context_handler = new ContextHandler();
    context_handler.addAliasCheck(new ApproveAllAliases());
    context_handler.setHandler(handlers);

    // IP访问控制
    InetAccessHandler access_handler = new InetAccessHandler();
    addIPRules(access_handler);
    access_handler.setHandler(context_handler);

    server.setHandler(access_handler);
}

其他注意事项

  • 原有的处理器链式结构(Gzip包装、别名检查、IP访问控制)完全兼容,不用调整层级关系。
  • 只要你的My_jetty_handler已经适配了Jetty 12的ResourceHandlerAPI(比如之前改的请求地址获取逻辑),就能正常运行。如果还有其他重写方法报错,查下Jetty 12的ResourceHandler文档调整就行。
  • 别名检查用的ApproveAllAliases还能用,要是想更严谨,也可以换成AllowSymLinkAliasChecker这类细粒度的实现。

内容的提问来源于stack exchange,提问作者Michał Niklas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:13:11