springboot编译以及路径总结

Question 1

  • springboot 存在静态资源以及映射的路径mapping,那么访问该路径优先加载哪个呢?

    answer: springboot先匹配mapping路径,如果mapping不存在该映射路径,那么再查找该路径的静态资源,如果不存在,那么返回404页面。由于该方法加了@ResponseBody注解,如下返回了 “hello字符串”,而并没有返回 静态资源 “java.txt”的内容。

    在这里插入图片描述

  • springboot 默认扫描如下路径的静态资源

classpath:/static 
classpath:/public 
classpath:/resources 
classpath:/META-INF/resources

也可以通过 在properties文件下自己指定

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/

这个的classpath是什么意思呢?就是classes文件夹的根目录。

一般我们在创建Myeclipse工程的时候,原则上是可以创建起任意名的文件夹,如图

在这里插入图片描述

只要你在java Build Path选项下包含你创建的文件夹即可,它就会被编译器编译到classes目录。不过为了规范起见,大家创建资源文件夹的名还是要规范一点的。

在这里插入图片描述

上述工程目录编译过程详解:

​ 首先呢,所有自己创建的文件夹(包括resources)下的所有文件都会被放在classes根目录,如果你创建的文件夹下,还有子文件夹,那么他会把子文件夹一起复制到classes根目录,例如; 我创建了public目录,那么我的classes目录下会有resources文件夹以及public目录下的structs2.txt文件。

  • 如果创建的两个文件夹 都有个同名的子文件夹,那么编译后会怎样?

    ​ answer:那么资源都会汇总在classes/子文件夹/

  • 如果两个相同子文件夹下有两个相同名的静态文件,那么编译后会怎么样?

    ​ answer:这种情况,编译器会把最新的文件放置该文件夹下,也就是说哪个文件是最新修改的那么就把哪个文件放入那个编译后的子文件夹里。当然,为了保险起见,最好不要这么做,起两个名字也不是什么难事吧~。

结语:

​ 还要说明的是,本次测试发现一点神奇的地方,就是public文件夹
下的静态资源,即使不在public/resources/下的文件,在public文件夹放任意静态资源或者创建子文件夹以及在子文件夹下的静态资源,都可以随意访问,而对于其他的文件夹下的静态资源却不能直接访问(如下图的static文件夹的dd.txt,由于没有放在resources下所以访问不到),需要配置把那些静态资源放在他的子文件夹 resources下就可以访问了。同时我看出了public文件夹的特殊性。我想这应该就涉及到springboot底层的设计思想了。有时间研究springboot源码。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值