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

Dropwizard 1.3静态资源服务报错求助:Jetty相关异常

解决Dropwizard 1.3中AssetsBundle静态资源访问的Jetty异常问题

看起来你遇到的org.eclipse.jetty.util.SharedBlockingCallback异常,通常和静态资源找不到或者路径映射配置错误有关,结合你的代码和场景,我整理了几个排查和解决步骤:

1. 修正AssetsBundle的初始化配置

你当前的代码是:

bootstrap.addBundle(new AssetsBundle("/assets/", "/assets"));

这里第二个参数是对外暴露的URL路径,注意末尾的斜杠很重要。Dropwizard的AssetsBundle在匹配路径时,带斜杠和不带斜杠的映射逻辑有差异。建议修改为:

// 明确指定资源路径、暴露路径(带斜杠),可选添加默认索引页
bootstrap.addBundle(new AssetsBundle("/assets/", "/assets/", "index.html"));

如果不需要默认索引页,至少要保证暴露路径带斜杠:

bootstrap.addBundle(new AssetsBundle("/assets/", "/assets/"));

这样配置后,/assets/index.html会正确映射到classpath下/assets/index.html资源。

2. 验证静态资源是否被正确打包

很多时候问题出在资源没有被编译进应用的classpath:

  • 执行mvn clean package(Maven)或gradle build(Gradle)后,检查target/classes/assets/目录下是否存在index.html文件。
  • 如果资源不在这个目录,检查你的构建工具配置,确保src/main/resources被标记为资源目录,没有被排除在打包之外(Maven和Gradle默认会包含这个目录,但自定义配置可能会覆盖)。

3. 查看完整的异常堆栈

你只看到了异常的开头部分,完整的堆栈跟踪会给出更关键的信息——比如是否是FileNotFoundException(资源找不到),这能直接定位问题根源。启动应用时打开日志的debug级别,或者查看控制台输出的完整错误信息。

4. 检查路径冲突

如果你的应用中还有其他Servlet或Jersey资源使用了/assets/*路径,会导致映射冲突。确认你的REST接口或其他组件没有占用这个路径前缀。

按照上面的步骤调整后,应该能解决静态资源访问的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:29:27