spring boot web应用程序不提供静态内容

时间:2014-09-22 10:27:04

标签: file static spring-boot

我正在使用角度框架开发一个spring boot应用程序。我将项目结构如下:

  • src / main / java:spring-boot文件,控制器,持久性
  • src / main / resources:application.properties
  • src / main / app:" webapp"文件,角度,css,模块

为了在/ app下使用spring提供静态内容,我通过覆盖addResourceHandlers方法扩展了WebMvcConfigurerAdapter类:

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = { "com.myapp.controller" })
public class WebMvcConfig extends WebMvcConfigurerAdapter {

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
        "classpath:/resources/", "/" }; //src/main/webapp works by default

private static final String[] RESOURCE_LOCATIONS = { "classpath:/src/main/app/", "classpath:/src/main/app/" };

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {

    if (!registry.hasMappingForPattern("/webjars/**")) {
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    if (!registry.hasMappingForPattern("/**")) {
        registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS).setCachePeriod(0);
    }

    if (!registry.hasMappingForPattern("/app/**")) {
        registry.addResourceHandler("/app/**").addResourceLocations(RESOURCE_LOCATIONS).setCachePeriod(0);
    }
}}

尝试使用时访问角度主文件 http://localhost:8080/app/app.html 我收到一个http错误404.出于某种原因,如果我将/ app文件夹重命名为/ webapp,我可以定位http://localhost:8080/app.html。我肯定错过了一些东西,但无法弄清楚它是什么。感谢

2 个答案:

答案 0 :(得分:2)

您需要在类路径中提供资源位置,而不是它们在源中的位置。例如,src/main/resources/static中的资源由资源位置classpath:/static/提供,因为Maven构建会导致src/main/resources中的所有内容都位于类路径的根目录中。简而言之,classpath:/src/main/app的资源位置几乎肯定是错误的:您需要配置Spring Boot以从您配置Maven以构建和打包它们的任何地方加载资源。

答案 1 :(得分:1)

添加此文件。它对我有用。假设静态资源文件位于文件夹下:src / main / webapp。

@Configuration 公共类WebMappingConfig扩展了WebMvcConfigurerAdapter {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    // 1. when put angularjs under src/main/resources/static.
    // String[] myExternalFilePath = {"classpath:/static/app/build/"};
    // 2. when put angularjs under src/main/webapp.
    String[] staticResourceMappingPath = { "/app/build/",
            "classpath:/static/", "classpath:/static/app/build/" };

    registry.addResourceHandler("/**").addResourceLocations(
            staticResourceMappingPath);
}

}

试一试: 1. cd / src / main / webapp 2. git clone https://github.com/ngbp/ngbp.git app 3. cd app 4. npm安装
凉亭安装 6.咕噜咕噜的手表

但是在安装时,静态资源不会被复制到* .jar文件中,您需要将app / build /文件夹下的所有文件复制到src / main / resource / static。