如何改变Spring Boot提供静态文件的方式?

时间:2016-02-25 15:55:31

标签: spring-boot jhipster

最近在几个新项目上使用了JHipster(强烈推荐!出色的工作!),我试图将一些概念反向移植到一个较旧的webapp中,基本上将它迁移到Spring Boot和Angular。

在Spring Boot中,静态Web资源(HTML,JS,CSS等)的默认位置位于根目录中的publicstaticresources目录中类路径。春季启动将获取这些目录中的任何一个,并且可以通过HTTP访问其中的文件。

在JHipster中,Web文件位于src/main/webapp目录中。这是默认情况下在经典Maven WAR项目中使用的目录。

我更喜欢这个,因为:

  • 它更清楚地将静态Web内容与Java代码
  • 使用的类路径资源分开
  • 嵌套不太深(我们已经有足够级别的目录嵌套Maven了!)。

但是,如果我只是在我的项目中创建webapp目录并将我的HTML文件放入其中,则它们不能通过HTTP获得,并且构建过程会在其中创建WEB-INF目录结构。我不想要那个,而在JHipster中,事实并非如此。

如何配置Spring Boot的行为与JHipster中的行为相同?

对于那些不熟悉JHipster的人:如何指示Spring Boot从不同的文件夹提供静态文件,不包含在类路径中?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下配置。这个想法应该很直接。它确实在assets目录中注册工件。

public class AppMvcConfiguration extends WebMvcConfigurerAdapter {

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
      // Including all static resources.

      registry.addResourceHandler("/assets/**", 
                  "/css/**", 
                  "/img/**",
                  "/js/**"
             ).addResourceLocations("/assets/",
                  "/css/", 
                  "/img/",
                  "/js/"
      ).resourceChain(true)
       .addResolver(new PathResourceResolver());

       super.addResourceHandlers(registry);
  }
}

答案 1 :(得分:0)

您可以在application.propertise中添加以下代码:

spring.resources.static-locations=classpath:/webapp/

以及application.yaml中的以下代码:

resources:
    static-locations: classpath:/webapp/