【问题标题】:Can I serve static content with spring-boot-starter-tomcat but without spring-boot-starter-web?我可以使用 spring-boot-starter-tomcat 但没有 spring-boot-starter-web 提供静态内容吗?
【发布时间】:2017-09-17 17:54:21
【问题描述】:

我正在使用 spring-boot-starter-jerseyspring-boot-starter-tomcat (v. 1.5.2) 开发 Web 服务,因此,我宁愿不添加 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 的子目录提供服务?

【问题讨论】:

    标签: spring-mvc tomcat spring-boot jersey-2.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 团队的一些人可以启发我们。

    【讨论】:

    • 这和你在stackoverflow.com/questions/29658240/… 上给出的答案使我能够在不添加 Spring Boot Web 的情况下将 Swagger UI 添加到我的 Spring Boot + Jersey webapp。谢谢!现在,如果我能找到解决 Swagger UI 不支持摘要式身份验证的问题。
    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 2018-10-15
    • 2019-10-28
    • 2017-02-19
    • 2021-01-22
    • 2019-08-23
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多