静态资源访问问题

目录

一、关于静态资源你必须知道的前置知识?

二、springboot项目中如何自定义静态资源位置

2.1 application配置文件中配置 

2.2 实现WebMvcConfigurer接口

 2.3 关于静态文件目录层级问题


一、关于静态资源你必须知道的前置知识?

        首先,在以往SSM框架中,当我们把静态资源放到webApp目录下时,如果不做任何配置,我们默认是访问不了静态资源的,需要在springmvc中做一个静态资源放行.而在springboot框架中,当我们把静态资源放到

resources/META-INFO/resources,

resources/resourc,

resources/static,

resources/public,

/webapp(springboot项目中不需要webapp目录,但是也可以自己创建一个)

这些目录下时,不需要做任何配置,我们就可以访问静态资源,这是因为springboot已经帮我们配置好了.

 另外这里的目录如果都存在的话,存在一个优先级问题,按照我写的,从上到下优先级依次降低.

我们在初学springboot时,常常听人说约定大于配置,初听不知含义,其实只要多看看springboot自动配置原理就能感悟一些.说白了,约定大于配置, 就是springboot本身已经配置好了一些东西,开发者不用自己再配置了,我们一起约定好就用这种配置,例如在这里的静态资源目录问题上,我springboot帮你配置好了,咱们约定好就用这里的配置,你就可以使用了,别的不劳您操心.

二、springboot项目中如何自定义静态资源位置

2.1 application配置文件中配置 

spring:
  web:
    resources:
      static-locations: classpath:/dist2/

然后直接访问:http://127.0.0.1:8080/01.html 即可

2.2 实现WebMvcConfigurer接口

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/dist/");
    }
}

然后直接访问:http://127.0.0.1:8080/01.html 即可

 2.3 关于静态文件目录层级问题

        在registry.addResourceHandler("/**").addResourceLocations("classpath:/dist/")这个配置中我们首先要明确这里的/**和classpath:/dist/的含义.

        /:指的是你项目的根路径,

        **:指定是你所访问的资源

        classpath:指的是你项目的类路径

        /dist/:指的是你项目类路径下的dist文件夹

         注意点:

        1.当我们进行访问http://127.0.0.1:8080/01.html时,springboot会根据你的配置,将**接到/dist/下,在我们这里就是将01.html接到/dist/后面,在内部真正访问的是http://127.0.0.1:8080/dist/01.html.

         2.如果当我们在这里将配置改为registry.addResourceHandler("/test/**").addResourceLocations("classpath:/dist/");时,也同样是将**追加到/dist/后面,而这里test只是我们添加的访问时的路径,此时在浏览器中我们访问的路径应是

 http://127.0.0.1:8080/test/01.html

         3.在实际项目开发中,我们一般会给项目添加一个上下文,如添加配置

server:
  servlet:
    context-path: /Project

        这样我们就给项目添加了一个系统上下文/Project,这里跟在ssm项目中我们在idea中将war包部署到本地的tomcat中,给tomcat取一个虚拟名称一样,也和将war包部署到外部tomcat,如测试环境中的tomcat中,tomcat默认的文件名一样.

        此时我们的项目根路径为/Project,如果我们这时静态资源配置为registry.addResourceHandler("/**").addResourceLocations("classpath:/dist/")的话,那么这时的**代表是什么,按照前面所说,是代表Project/test/01.html吗?并不是,这时我们的/**中的 / 代表的是/Project/,此时我们的访问路径为 http://127.0.0.1:8080/Project/01.html,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值