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

Embedded Jetty从6.1.7升级到9.4.43后FileProxyServlet访问404求助

Jetty 6.1.7 升级至 9.4.43 后自定义 Servlet 404 问题排查方案

核心变更说明

Jetty 6 到 Jetty 9 对 Servlet 注册逻辑、路径匹配规则、jetty.xml 配置语法做了多处不兼容调整,是导致原有 FileProxyServlet 映射失效的核心原因。

分步排查点

  • 修正 Servlet 路径映射规则
    Jetty 9 对 Servlet 路径映射做了严格的规范校验,Jetty 6 中配置的 /cts/output 映射仅能命中完全一致的请求路径,若业务请求路径为 /cts/output/xxx 类带后缀的形式,会无法匹配。需要将 jetty.xml 中 Servlet 的 url-pattern 调整为 /cts/output/*。
  • 验证 Servlet 初始化状态
    Jetty 9 不会默认抛出 Servlet 初始化失败的致命错误,仅会跳过注册,访问时返回 404。可以在服务启动参数中加入 -Dorg.eclipse.jetty.servlet.LEVEL=DEBUG 开启 Servlet 初始化日志,确认 FileProxyServlet 有没有被成功注册到 ServletContext 中,排查是否存在类路径错误、init-param 缺失的问题。
  • 校验 ContextPath 配置
    若你在新版 jetty.xml 中新增了 ContextHandler 的 contextPath 配置,会导致根路径映射变更,只有当 contextPath 配置为 / 时,才能直接通过 /cts/output 访问自定义 Servlet,否则需要在访问路径前加上配置的 contextPath 前缀。
  • 调整 Servlet 加载优先级
    Jetty 9 默认的 DefaultServlet 用于处理静态文件,优先级高于自定义 Servlet,若 DefaultServlet 配置了 /* 的映射规则,会优先拦截所有请求,导致自定义 Servlet 无法被命中。需要将 FileProxyServlet 的 loadOnStartup 属性设为 1,高于 DefaultServlet 的默认优先级 0。
  • 修正配置加载代码逻辑
    Jetty 9 废弃了 6 版本中 XmlConfiguration 类的部分重载方法,原有加载配置的代码需要调整为直接传入 Server 实例调用 configure 方法,且需要在启动 Server 前手动触发 ServletContextHandler 的 start 逻辑,确保 Servlet 完成初始化。

内容的提问来源于stack exchange,提问作者Avinash Modi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:27:02