我正在使用spring-boot-starter-jersey
和spring-boot-starter-tomcat
(v.1.5.2)处理网络服务,因此,我宁愿不添加spring-boot-starter-web
,这进一步使我的配置复杂化。我想将Swagger UI静态文件粘贴在一个文件夹中并从那里提供它们。
我想知道的是,我可以仅使用spring-boot-starter-tomcat
提供静态文件吗?我找到了Spring documentation saying that I can server static content from a variety of sources on the classpath,但我发现的例子似乎需要Spring MVC。我已经尝试禁用Jersey并在src/main/resources/static
中放置静态文件来测试Tomcat,但是当我转到localhost / index.html时,我得到404找不到错误。
正如你可能从我的道路上讲,我正在使用Maven。
由于您可以仅使用Tomcat提供静态文件,因此我似乎应该可以使用spring-boot-starter-tomcat
提供静态文件。如果是这种情况,我在哪里放这些文件?
换句话说,我已经开始使用Spring-provided spring-boot-sample-jersey project了。我要求Jersey Web服务应答根地址(/)。我如何添加一些静态内容(HTML,CSS,JS)从名为/ swagger的子目录中提供?
答案 0 :(得分:1)
因此默认注册默认servlet(提供静态内容)。但它只使用搜索特定路径作为文档根。我不得不将源代码挖掘到finally find it。如果你查看AbstractEmbeddedServletContainerFactory
,就会看到
private static final String[] COMMON_DOC_ROOTS = {
"src/main/webapp", "public", "static" };
如果我们没有明确设置文档根目录,则以上三个是要搜索的路径。按顺序,找到的第一个目录将用作文档根目录。我已经验证了所有这些工作。
如果要设置其他目录,可以使用自定义程序bean
@Bean
public EmbeddedServletContainerCustomizer tomcatCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setDocumentRoot(new File("src/main/resources/static"));
}
};
}
我还没想到的一件事是,我们是否可以将文件作为类路径资源而不是文件系统资源来提供。如果你查看我链接的源代码,它有一些代码可以查找是否存在META-INF/resources
。我认为这可能有用,但不幸的是它对我来说并不适用。也许Spring Boot团队的一些人可以启发我们。