搜索
您的当前位置:首页正文

spring boot如何处理静态资源

来源:哗拓教育

情景描述

  • 前端使用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也是这样吗?

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

  • 以后针对一个问题即使解决了,问题为什么发生。为什么解决了,以及有没有别的解决办法。。。至少三个问题反映在总结中。
Top