Spring Boot静态资源不可用

时间:2018-08-16 09:08:17

标签: java spring spring-boot

resources/static中的文件不可用。我该如何解决?

层次结构:

resources/
    db/
    static/
        image.png
    templates/
    application.properties

但是,如果我打开localhost:8081/image.png,则会出错。

我的WebConfig:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
            .addResourceHandler("/webjars/**")
            .addResourceLocations("/webjars/");
    }
}

3 个答案:

答案 0 :(得分:1)

在此提供您图像的路径:

registry.addResourceHandler("/**").addResourceLocations("file:/path/to/your/image/");

答案 1 :(得分:1)

您应将以下行添加到现有资源映射中:

 registry.addResourceHandler("/**")
            .addResourceLocations("resources/static/");

您已将webjars resourceHandler配置为提供客户端脚本或样式表依赖项。但是未添加自定义处理程序来提供您的图像文件。

由于您要覆盖addResourceHandlers (ResourceHandlerRegistry registry)方法,因此应在实现中提供所有resourceLocation和处理程序映射。

请查看serving-static-web-content-with-spring-boot文章以更清楚地了解主意。

注意:

如果您使用的是spring-boot,那么在WebMvcAutoConfiguration.java中已明确要求l之前,不应重写上述方法。

请检查以下默认实现:

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (!this.resourceProperties.isAddMappings()) {
            logger.debug("Default resource handling disabled");
            return;
        }
        Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
        CacheControl cacheControl = this.resourceProperties.getCache()
                .getCachecontrol().toHttpCacheControl();
        if (!registry.hasMappingForPattern("/webjars/**")) {
            customizeResourceHandlerRegistration(registry
                    .addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/")
                    .setCachePeriod(getSeconds(cachePeriod))
                    .setCacheControl(cacheControl));
        }
        String staticPathPattern = this.mvcProperties.getStaticPathPattern();
        if (!registry.hasMappingForPattern(staticPathPattern)) {
            customizeResourceHandlerRegistration(
                    registry.addResourceHandler(staticPathPattern)
                            .addResourceLocations(getResourceLocations(
                                    this.resourceProperties.getStaticLocations()))
                            .setCachePeriod(getSeconds(cachePeriod))
                            .setCacheControl(cacheControl));
        }
    }

答案 2 :(得分:0)

如果您希望从WAR之外提供静态内容(包括网页,js,pdf,css,pdf,doc等),可能会很有用。如果您想更改任何静态内容,只需将更改后的文件轻松地放置到应用程序服务器上的内容路径中即可,而无需部署或重新启动应用程序服务器即可。如果您喜欢这种方式,则可以在应用程序服务器上进行小的配置。