Java --- springboot3之web静态资源配置

目录

一、静态资源规则

二、欢迎页规则

三、favicon.ioc规则

四、HTTP缓存机制 

五、自定义静态资源规则

 5.1、配置方式

5.2、代码方式


一、静态资源规则

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!this.resourceProperties.isAddMappings()) {
        logger.debug("Default resource handling disabled");
        return;
    }
    //1、
    addResourceHandler(registry, this.mvcProperties.getWebjarsPathPattern(),
            "classpath:/META-INF/resources/webjars/");
    addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
        registration.addResourceLocations(this.resourceProperties.getStaticLocations());
        if (this.servletContext != null) {
            ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
            registration.addResourceLocations(resource);
        }
    });
}

1、规则一:访问: /webjars/**路径就去 classpath:/META-INF/resources/webjars/下找资源。可通过maven导入

2、规则二:访问: /**路径就去 静态资源默认的四个位置找资源

3、规则三、静态资源默认都有缓存规则的设置

registration.setCachePeriod(getSeconds(this.resourceProperties.getCache().getPeriod()));
registration.setCacheControl(this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl());
registration.setUseLastModified(this.resourceProperties.getCache().isUseLastModified());

①、所有缓存的设置,直接通过配置文件spring.web

②、cachePeriod: 缓存周期; 多久不用找服务器要新的。 默认没有,以s为单位

③、useLastModified:是否使用最后一次修改。配合HTTP Cache规则

④、cacheControl: HTTP缓存控制;

二、欢迎页规则

//SpringBoot 给容器中放 WebMvcConfigurationSupport 组件。
//我们如果自己放了 WebMvcConfigurationSupport 组件,Boot的WebMvcAutoConfiguration都会失效。
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(WebProperties.class)
public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration implements ResourceLoaderAware 
{

    
}

三、favicon.ioc规则

 

四、HTTP缓存机制 

只需要在springboot的配置文件中进行配置

server.port=9000

#1、spring.web:
# 1.配置国际化的区域信息
# 2.静态资源策略(开启、处理链、缓存)

#开启静态资源映射规则
spring.web.resources.add-mappings=true

#设置缓存
#spring.web.resources.cache.period=3600
##缓存详细合并项控制,覆盖period配置:
## 浏览器第一次请求服务器,服务器告诉浏览器此资源缓存7200秒,7200秒以内的所有此资源访问不用发给服务器请求,7200秒以后发请求给服务器
spring.web.resources.cache.cachecontrol.max-age=7200
#使用资源 last-modified 时间,来对比服务器和浏览器的资源是否相同没有变化。相同返回 304
spring.web.resources.cache.use-last-modified=true

五、自定义静态资源规则

 5.1、配置方式

在springboot的配置文件中进行配置

 测试结果:

 也可以通过web配置:不仅可以配置静态资源文件夹位置还可以配置缓存策略

#自定义静态资源文件夹位置
spring.web.resources.static-locations=classpath:/a/,classpath:/b/,classpath:/static/

5.2、代码方式

实现WebMvcConfigurer方式

//@EnableWebMvc //禁用boot默认配置
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //保留以前的默认配置
        //自定义配置
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/a/","classpath:/b/")
                .setCacheControl(CacheControl.maxAge(5000, TimeUnit.SECONDS));
    }
}

 给容器中放一个WebMvcConfigurer组件

 @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer(){
            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
            //保留以前的默认配置
           //自定义配置
            registry.addResourceHandler("/static/**")
                    .addResourceLocations("classpath:/a/","classpath:/b/")
                    .setCacheControl(CacheControl.maxAge(5000, TimeUnit.SECONDS));
            }
        };
    }

容器中放一个WebMvcConfigurer就能配置底层行为

  1. WebMvcAutoConfiguration 是一个自动配置类,它里面有一个 EnableWebMvcConfiguration
  2. EnableWebMvcConfiguration继承与 DelegatingWebMvcConfiguration,这两个都生效
  3. DelegatingWebMvcConfiguration利用 DI 把容器中 所有 WebMvcConfigurer 注入进来
  4. 别人调用 `DelegatingWebMvcConfiguration` 的方法配置底层规则,而它调用所有 WebMvcConfigurer的配置底层方法。
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可能是以下原因导致的: 1. 静态资源路径不正确:请确保静态资源的路径正确,可以在浏览器中手动输入路径来检查是否能够访问到静态资源。 2. 静态资源未放置在正确的目录下:请确保静态资源放置在Spring Boot默认的静态资源目录下,即src/main/resources/static/目录下。 3. 静态资源未被正确配置:请在application.properties或application.yml中配置静态资源的路径,例如: ``` # application.properties spring.resources.static-locations=classpath:/static/ # application.yml spring: resources: static-locations: classpath:/static/ ``` 如果以上方法都无法解决问题,请提供更多的信息,例如错误提示信息、代码片段等,以便更好地帮助您解决问题。 ### 回答2: Spring Boot是一个开发框架,它提供了很多便捷的方式来构建Java Web应用程序。在Spring Boot中,默认情况下,静态资源的路径是在classpath下的/static或/public或/resources或/META-INF/resources文件夹中。如果我们在这些文件夹中添加了静态资源,那么应用程序就可以通过相对路径来访问这些静态资源。 如果Spring Boot应用程序无法访问静态资源,可能有以下几个原因: 1. 静态资源文件放置位置不正确:请确保静态资源文件放置在类路径上的正确位置,即/static或/public或/resources或/META-INF/resources文件夹中。 2. 静态资源文件命名不正确:请确保静态资源文件的命名正确,并且包含文件扩展名。例如,对于一个名为"index.html"的HTML文件,请确保文件名和扩展名都正确。 3. 静态资源文件路径错误:请确保在访问静态资源时,使用了正确的路径。相对路径和绝对路径都可以使用,具体取决于你的应用程序配置。 4. 静态资源文件被过滤或限制访问:有时候,服务器可能会有配置或规则来过滤或限制对某些文件类型或路径的访问。请检查服务器的配置和规则,确保没有禁止访问静态资源。 如果按照以上步骤仍然无法解决问题,建议检查应用程序的日志信息,看是否有相关错误或异常信息。通过排查错误信息,我们可以更好地理解问题的原因,并能够采取适当的措施来解决问题。 总之,Spring Boot访问不到静态资源可能是由于资源文件位置不正确、命名错误、路径错误或者被过滤限制访问等原因导致的。要解决这个问题,我们需要检查这些方面并采取适当的措施来纠正。 ### 回答3: springboot默认的静态资源路径为`/static`、`/public`、`/resources`、`/META-INF/resources`,当我们将静态资源放在这些路径中时,可以直接通过相对路径访问静态资源。 如果springboot无法访问到静态资源,可能有以下几个原因: 1. 静态资源没有放在默认的路径中:请确保静态资源文件夹是放在了`/static`、`/public`、`/resources`、`/META-INF/resources`这些路径中,或者在`application.properties`或者`application.yml`中配置了自定义的静态资源路径。 2. 静态资源被拦截器拦截:如果应用中有自定义的拦截器,可能会拦截静态资源请求。需要在拦截器中添加排除静态资源配置。 3. 静态资源处理器未配置:在`WebMvcConfig`类中,需要添加`@EnableWebMvc`注解,并重写`addResourceHandlers`方法,来自定义静态资源处理器。 4. 静态资源访问权限问题:如果静态资源文件夹是放在了`resources`目录下,可能存在资源文件夹的访问权限问题。可以尝试使用绝对路径或者修改资源文件夹的权限。 以上是常见的一些原因,可以根据具体情况进行排查和解决。希望对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值