这一节详细的学习一下SpringBoot的静态资源访问相关的知识点。因为这个知识点是我之前学习SpringBoot时的一个遗留问题,当初并没有详细的去学习。像这样的知识点还挺多,比如SpringBoot2的Junit单元测试等等。我决定静下心来好好学习和整理一下这些之前忽略掉的知识点。我争取做到让每个看的人都能看懂。
1.静态资源目录
只要静态资源放在类路径下,如项目中:在原本resources
目录下面的/static
目录在我们创建的springboot项目就有,或者是我们自己在resources
下面创建的/public
目录,或者是在原本的resources
目录下自己自己创建的/resources
目录,又或者是在原本resources
目录下自己创建的/META-INF/resources
目录。这些目录都是静态资源目录。
下面我们在里面分别放入静态资源(这里放入不同的图片)来做测试。
会发现访问这四个目录下存放的图片我们都是能够正常地访问到的。(上面只演示了2个)。
我们通过访问 当前项目根路径/ + 静态资源名 就能访问到里面存放的静态资源。这个根目录/就是我们项目原本的resources目录等其他上面我们说的那些目录。SpringBoot默认将我们的静态资源目录映射为/**。
2.静态资源访问前缀
我们先来写一个Controller,继续来学习。
package com.example.demo01.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/1.png")
public String hello(){
return "aaa";
}
}
上面我们请求方法的mapping我写为1.png,这时就就有一个问题值得我们去思考了。我们访问/1.png
的时候,究竟访问返回的是aaa这个字符传还是1.png这张图片呢?我们不妨运行来做一个测试。
会发现他返回的其实是aaa,而不是这张图片了。
原理: 请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面
我们一般希望所有的静态资源的访问路径都有一个前缀,可以通过在application.properties配置文件中添加如下的配置来实现:
spring.mvc.static-path-pattern=/res/**
此时,当我们访问静态资源时,就要加上/res的前缀才能进行访问了:
这还没有完呢,springboot还支持我们更改我们的静态资源的默认存放路径,我们对配置文件添加一条配置:
spring.mvc.static-path-pattern=/res/**
spring.web.resources.static-locations=classpath:/haha
此时,我们重新运行项目,访问前目录存放的静态资源就会发现访问不了了。
我们把一张图片放到创建的haha文件夹中,重新运行:
3.对webjar的支持
WebJars是一个很神奇的东西,可以让大家以jar包的形式来使用前端的各种框架、组件。WebJars是将客户端(浏览器)资源(JavaScript,Css等)打成jar包文件,以对资源进行统一依赖管理。WebJars的jar包部署在Maven中央仓库上。 因为我们在开发Java web项目的时候会使用像Maven,Gradle等构建工具以实现对jar包版本依赖管理,以及项目的自动化管理,但是对于JavaScript,Css等前端资源包,我们只能采用拷贝到webapp目录下的手工方式,这样做就无法对这些资源进行依赖管理。而且容易导致文件混乱、版本不一致等问题。那么WebJars就提供给我们这些前端资源的jar包形式,我们就可以进行 依赖管理 。
有一个专门的网站http://www.webjars.org/,我们可以到这个网站上找到自己需要的资源,在自己的工程中添加入maven依赖,即可直接使用这些资源了。
下面简单的来介绍一下webjar的基本使用:
(1) 在maven中央仓库中搜索我们需要的webjar,如jquery
(2)然后在pom.xml中添加依赖:
<!-- https://mvnrepository.com/artifact/org.webjars/jquery -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.6.0</version>
</dependency>
然后我们就可以在浏览器中访问/webjars/jquery/3.6.0/jquery.js
就可以访问我们的webjars的资源了。
(这里给运行没有反应的各位提一点建议,就是把target目录删掉然后重新运行)
4.自定义index欢迎页
静态资源路径下index.html
,由于我们上面配置了默认的静态资源路径为classpath:/haha
,所以我们要在haha目录下面创建index.html。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>demo01</title>
</head>
<body>
<h1>害恶细君!</h1>
</body>
</html>
浏览器可以访问:
上面我们配置了静态资源的前缀和默认路径,所以访问时要加上/res/index.html
才能访问,并且index.html还必需得放在我们定义的haha目录下。
如果我们把配置文件的这两行配置去掉的话,就得在原本springboot默认的静态资源目录中存放index.html。
之后我们运行http://localhost:8080
直接就能访问到index.html了:
这里我就要总结一下注意点了:
静态资源路径下index.html
,可以配置静态资源的存放路径,但是不可以配置静态资源的访问前缀,否则导致index.html不能被默认访问。
5.自定义favicon
这个favicon就是我们网站的小图标。我们的网站也可以自定义这样得一个小图标。
下面具体来演示如何使用:
(1)我们先把百度的favicon.ico图标给爬下来,然后放到我们的静态资源目录下面,就可以了。(注意:图标必须叫favicon.ico
)
(2)重新运行项目,重新打开浏览器。