繁体   English   中英

Spring Boot静态资源不可用

[英]Spring Boot static resources are not available

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/");
    }
}

这里给出您的图像的路径:

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

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

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

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

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

请查看带有弹簧启动的提供服务的静态网络内容”文章,以了解更清晰的想法。

注意:

如果您使用的是spring-boot,那么WebMvcAutoConfiguration.java已明确要求,否则不要重写上面的方法。

请检查以下默认实现:

@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));
        }
    }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM