Dropwizard 1.3.0-rc6静态HTML文件服务配置问题求助
我之前在Dropwizard 1.3.x版本踩过一模一样的静态资源配置坑,当时查了好多旧文档都没用,折腾了好久才搞定,给你分享下我亲测有效的解决步骤:
解决Dropwizard 1.3.0-rc6静态资源服务配置问题
第一步:先把静态资源放到正确的目录
Dropwizard默认只会从src/main/resources加载静态资源,src/main/java是专门放Java代码的,你把静态文件塞到这里肯定找不到。赶紧调整目录结构,改成这样:
src/main/ ├── java │ └── org │ └── com │ └── query │ ├── rest │ ├── api │ ├── cli... ├── resources │ ├── static # 新建这个文件夹,把你的HTML文件放这里 │ │ └── index.html
第二步:用1.3.x版本专属的YAML配置
别再看旧文档里的assets配置了,Dropwizard 1.3.x已经改用resources块来配置静态资源。给你个现成的配置示例,直接抄进你的config.yml:
server: applicationConnectors: - type: http port: 8080 adminConnectors: - type: http port: 8081 resources: mappings: - path: /* # 浏览器访问的URL前缀 resourcePath: /static/ # resources下的静态资源目录,必须以/开头 cacheControl: "max-age=3600" # 可选:设置缓存时间,按需调整
配置完后,访问http://localhost:8080/index.html就能加载到你放在src/main/resources/static里的文件了。
第三步:如果YAML配置不生效,手动注册资源处理器
有时候自定义了Servlet环境会导致YAML配置失效,这时候就在你的Application子类的run方法里手动加这段代码:
@Override public void run(YourAppConfiguration config, Environment env) { // 先保留你原来的业务代码 // 手动注册静态资源处理器 ServletRegistration.Dynamic staticServlet = env.getApplicationContext().addServlet(DefaultServlet.class, "/*"); // 用类路径的方式加载,不管是开发环境还是打包成jar都能用 staticServlet.setInitParameter("resourceBase", getClass().getResource("/static/").toString()); staticServlet.setLoadOnStartup(1); }
注意把YourAppConfiguration换成你自己的配置类名就行。
第四步:检查构建工具是否打包了静态资源
如果打包成jar后还是访问不到,先解压jar看看BOOT-INF/classes/static/下面有没有你的HTML文件。如果没有,就是构建工具没把资源打包进去:
- Maven用户:检查
pom.xml里有没有这段配置(没有就加上):
<build> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
- Gradle用户:在
build.gradle里确认资源配置:
sourceSets { main { resources { srcDirs = ['src/main/resources'] } } }
最后提醒几个容易踩的坑
resourcePath必须以/开头,比如/static/,不能写成static/,否则会找不到资源- 开发环境用
mvn dropwizard:run启动前,先执行mvn compile确保资源被同步 - 别把静态资源和Java代码混放,不仅找不到,还会让项目结构混乱
内容的提问来源于stack exchange,提问作者DJ2
相关产品推荐
相关产品推荐

