zl程序教程

您现在的位置是:首页 >  后端

当前栏目

SpringBoot之静态资源的访问与管理

SpringBoot静态资源 管理 访问
2023-06-13 09:13:13 时间

这一节详细的学习一下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)重新运行项目,重新打开浏览器。