情景描述
- 前端使用create-react-app打包好了所有的静态资源。
- 希望使用后端服务器直接加载静态资源
- 但是不知道spring boot是将静态资源存放在哪里,并且如何配置
矛盾点
- 想要使用类比于express中的
express.static
中间件的思想直接使用在spring boot项目中。发现问题:- 1.
app.use(express.static('dirPath'))
:其中我只需要给定一个path就可以简单的将静态资源的提取位置放在dirPath中即可。我只需要将静态资源存放在我定下的根路径即可。但是spring boot似乎将所有的配置都提前准备好了。因此想要我只需要找到他要求我存放的位置就行。但是需要存放在哪里? - 2.对于nodejs url只需要
http://localhost:port/dirpath
皆可以访问,那么spring boot也是这样吗?
- 1.
spring boot要求我们将静态资源存放在哪里呢?
- spring boot为我们提供了四个可以存放静态资源的目录,并且他们有优先级,当一个同名的请求过来。会根据优先级依次遍历不同的静态资源目录。
- 四个静态资源目录的位置都是一样的,均在classpath下;而classpath就是root/src/main/resources
- rootPath/src/main/resources/resources/**
- rootPath/src/main/resources/static/**
- rootPath/src/main/resources/public/**
优先级由高到底
那么这些静态的资源的访问方式有什么要求吗?
- 静态资源的请求方式其实可以完全理解成根据路径请求文件一样
- 比如我想要
rootPath/src/main/resources/resources/index.html
的文件,在本地我可以通过路径直接访问到,但是通过请求的方式:http://localhost:port/index.html
即可获取 - 静态目录的路径可以被当做
http://localhost:port
- 还有一个知识点需要get:所有静态目录下的index.html可以通过访问
http://localhost:port
获取,因此第二条的访问url可以被换成:http://localhost:port
- 但是请注意:唯一不需要文件名就可以访问的文件只有在静态目录下的index.html.
- 如果静态目录下有一个/home/index.html此时如果通过
http://localhost:port/home
是不能访问到的
那么如果我希望能够自定一个存放静态资源的目录我该怎么办?
- 重写webMvcConfig即可
- 编写类继承自WebMvcConfigurerAdapter重写其中方法。
- 接下我有一篇文件直接举例子讲述这种方式
反思
- 以前总是有个方法能解决问题即可,现在终于做到问这个问题出现是因为什么,但是却丢掉了,这样解决是为什么,有没有别的办法可以解决这个问题。
ACTION
- 以后针对一个问题即使解决了,问题为什么发生。为什么解决了,以及有没有别的解决办法。。。至少三个问题反映在总结中。