gpt4 book ai didi

spring-mvc - 我可以使用 spring-boot-starter-tomcat 但不使用 spring-boot-starter-web 来提供静态内容吗?

转载 作者:行者123 更新时间:2023-11-28 21:59:37 27 4
gpt4 key购买 nike

我正在使用 spring-boot-starter-jerseyspring-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 not found 错误。

您可能会从我的路径中看出,我正在使用 Maven。

既然你可以只用 Tomcat 提供静态文件,看来我应该可以用 spring-boot-starter-tomcat 提供静态文件。如果是这种情况,我应该将这些文件放在哪里?

换句话说,假设我从 Spring-provided spring-boot-sample-jersey project 开始.我要求 Jersey Web 服务应答对根地址 (/) 的调用。我如何添加一些静态内容(HTML、CSS、JS)以从名为/swagger 的子目录提供服务?

最佳答案

所以默认的 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 团队的一些人可以启发我们。

关于spring-mvc - 我可以使用 spring-boot-starter-tomcat 但不使用 spring-boot-starter-web 来提供静态内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43530677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com