Springboot设置并访问静态资源目录

news2024/10/6 10:41:44

目录​​​​​​​

静态文件

application设置方法

配置详解

编写配置

优缺点

设置配置类方法

配置详解

编写配置

优缺点

总结


静态文件

        静态资源,一般是网页端的:HTML文件、JavaScript文件和图片。尤其是设置图片的静态资源,尤其重要:

这样的静态资源访问不会被Springboot所拦截处理(方便用于CDN加速):

        虽然真实项目里,图片可以直接存储在对象存储的存储桶内或者直接用Nginx进行反代,但是一些小的静态资源,直接Springboot规划静态资源,也是个不错的选择。

        Springboot内设置静态资源,或者说静态资源文件夹,主要有两种方法(均为SpringMVC实现):

        ·在application.yml/application.properties内配置。

        ·设置Configuration配置类。

更多内容,可以参考Spring官方文档:www.baeldung.com/spring-mvc-…

以上两种方法,均可实现用户访问网址,不走Controller层的拦截,直接进行静态文件访问:

application设置方法

配置详解

设置application方法很简单,主要涉及两个配置项:

        ·spring.mvc.static-path-pattern:

        - 根据官网的描述和实际效果,可以理解为静态文件URL匹配头,也就是静态文件的URL地址开头。Springboot默认为:/**。

        ·spring.web.resources.static-locations:

        - 根据官网的描述和实际效果,可以理解为实际静态文件地址,也就是静态文件URL后,匹配的实际静态文件。

        -Springboot默认为:

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

如何运作的?,这里我画个简单的图:

需要注意:

  • spring.web.resources.static-locations是后续配置,旧版Springboot的配置项为:spring-resources-static-locations;在2.2.5版本之后,旧版本配置已经失效。
  • spring.web.resources.static-locations有多个配置项,在Springboot编译后,会合并为一个文件。多个配置文件,使用,进行分割。
  • spring.web.resources.static-location仅仅允许一个配置,无法使用,进行分割,如果需要多个静态资源文件,可以使用下文的配置类方法。
  • spring.web.resources.static-locations可以使用classpath、file进行匹配。如果使用file,这个时候的相对路径为项目地址(打包为.jar后,相对路径就是.jar运行地址)。

编写配置

现在,官方描述,我们已经知道了配置项的含义。现在我们就来配置。

我使用的是YML格式的application配置,如果你是使用XML格式的application.properties,记得进行更改。

最终效果很简单,我想要的效果: 浏览器输入:http://localhost:8088/SystemData/UserData/Avatar/Mintimate.jpeg 可以直接访问项目文件下的:/SystemData/UserData/Avatar/Mintimate.jpeg

为了实现这样的效果,我们编写配置文件:

spring:
    mvc:
        # URL响应地址(Springboot默认为/**) 
        static-path-pattern: /SystemData/**
    web:
        resources:
            # 静态文件地址,保留官方内容后,进行追加
            static-locations:
classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,file:SystemData

其中,file:SystemData就是映射本地文件了。

这样的配置,类似于Nginx的正则匹配:

location ^~/SystemData{	alias /www/myWeb/SystemData;}

这样,我们运行项目,就可以直接访问静态资源了:

当然,这样有一些缺点……

优缺点

这样的配置,可以说最简单且粗暴,但是灵活性差一点点:

        ·URL响应地址只能为一项,也就是spring.mvc.static-path-pattern配置只能写一项。

        这意味着,按我上文设置了/SystemData/**为URL匹配,就不能设置第二个/resources/**这样的配置为第二静态目录。

如果需要设置多个地址为静态资源目录,可以参考下文的设置配置类方法方法。

设置配置类方法

配置详解

写一个配置类,实现静态资源的文件夹方法很多。比如:

  • 继承于WebMvcConfigurationSupport父类,并实现addResourceHandlers方法。
  • 引用WebMvcConfigurer接口,并实现addInterceptors方法

一些文章可能会让你继承于WebMvcConfigurerAdapter方法,但是实际上WebMvcConfigurerAdapter方法在Spring5.0和Springboot2.0之后,已经弃用。

这里,我处于习惯,就使用WebMvcConfigurationSupport进行实现addResourceHandlers:

@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
}

这里的registry使用链式编程,方法为:

  • addResourceHandler:添加URL响应地址目录。
  • addResourceLocations:添加实际资源目录。

        和application.yml里设置一样,支持classpath和file等关键词。接下来,我们就看看实际编写配置。

编写配置

现在我们就来配置。 最终效果很简单,我想要的效果(两组同时):

  • 浏览器输入:http://localhost:8088/SystemData/UserData/Avatar/Mintimate.jpeg
  • 可以直接访问项目文件下的:/SystemData/UserData/Avatar/Mintimate.jpeg,
  • 浏览器输入:http://localhost:8088/SystemDataTest/UserData/Avatar/Mintimate.jpeg
  • 可以直接访问项目文件下的:/Test/UserData/Avatar/Demo.jpeg,

        添加一个配置类,并继承WebMvcConfigurationSupport,实现addResourceHandlers方法,并打上@Configuration注解,使其成为配置类:

之后,重写内容:

主要是:

// 静态资源映射
registry
.addResourceHandler("/SystemData/**")
.addResourceLocations("file:"+IMG_PATH);

registry
.addResourceHandler("/SystemDataTest/**")
.addResourceLocations("file:"+IMG_PATH_TWO);

之后,浏览器就可以访问了:

这样的配置,其实还是和Nginx配置类是……: 这样的配置,类似于Nginx的正则匹配:

location ^~/SystemData{	alias /www/myWeb/SystemData;}

当然,这样的优缺点……

优缺点

相比前文的配置,这样优缺点很明显:

  • 相比前文,这样的配置更麻烦。
  • 相比前文,这样的可塑性更高:可以添加更多的映射、不会对默认配置造成覆盖等。

总结

        综上所述,就是Springboot的静态资源目录添加方法啦。是不是和Nginx很像?

        虽然现在Nginx和对象存储都很方便,但是直接用Springboot进行静态资源的划分,也不为一种方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈消防应急照明和疏散指示系统在建筑物中的设计与应用

安科瑞 华楠 摘 要:在消防安全意识逐渐提高的背景下,安全疏散技术也取得了不断发展。基于这种认识,本文对建筑物消防应急照明和疏散指示系统进行了介绍,然后对系统设计与应用方法展开了探讨,为关注这一话题的人们提供…

Linux--查看常驻进程:ps

进程分为瞬时进程和常驻进程 瞬时进程:瞬间完成从加载到内存、显示在输出设备、退出过程 int main() {printf("hello world!\n");return 0; } 常驻进程:一直在内存中 int main() {while (1){printf("hello world!\n");sleep(1);…

Java 动态规划 Leetcode 931. 下降路径最小和

代码展示: class Solution {public int minFallingPathSum(int[][] matrix) {int nmatrix.length;//创建dp数组int[][]dpnew int[n1][n2];//初始化for(int i1;i<n;i){dp[i][0]dp[i][n1]Integer.MAX_VALUE;}//填充数组for(int i1;i<n;i){for(int j1;j<n;j){dp[i][j]Ma…

【网络安全】Burpsuite v2021.12.1安装激活配置快捷启动

Burpsuite v2021.12.1安装&激活&配置&快捷启动 一、下载激活包二、配置JDK11三、启动激活 一、下载激活包 需要下载的内容&#xff1a; Burp Suite jar包JDK11激活jar包汉化jar包 下面是已经下载好的&#xff0c;可以直接使用 BurpSuite网盘下载链接 提取码&#…

单键触摸开关/双键触摸式照明灯/触摸式延时照明灯电路设计

单键触摸开关 触摸式照明开关是一种非常实用的电子开关&#xff0c;用手触摸一下导电片&#xff0c;就能实现开关动作 &#xff0c;使用方便可靠、电路简单、性能稳定、寿命长、节电效果明显。适合于爱好者自制。 一、电路工作原理 电路原理如图 21 所示。 接通电源后&#…

RabbitMQ ---- Hello World

RabbitMQ ---- Hello World 1. 依赖2. 消息生产者3. 信息消费者 本节使用 Java 编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。 1. 依赖 <!--指定 jdk 编译版本--><build><plugins><plugin><groupId>org.apache.maven.plu…

Scratch 随机平台跳跃

Scratch 随机平台跳跃 本程序转换为HTML后运行。程序在随机位置生成红、蓝平台各13个&#xff0c;通过W、A、S、D键控制角色移动&#xff0c;移动时把标记下落的变量设为1。该变量为1时角色下落&#xff0c;碰到边缘或平台时结束下落&#xff0c;变量设为0。这种方案的缺陷是角…

Databricks推出AI模型SDK,能自动生成SQL代码

近日一款AI模型的发布&#xff0c;或将有助于提高开发效率。据悉&#xff0c;最近Databricks发布大数据分析平台Spark所用的 AI 模型 SDK&#xff0c;开发者写代码时&#xff0c;可用英文下指令&#xff0c;编译器就会将英文指令转换为 PySpark 或 SQL 语言代码&#xff0c;以提…

偏振光的斯托克斯矢量表示法

《光纤偏振模色散原理 测量与自适应补充技术》张晓光 第二章

【Linux后端服务器开发】进程与地址空间概述

目录 一、进程创建 二、进程状态 1. 运行状态R 2. 睡眠状态S 3. 僵尸状态Z 4. 孤儿进程 三、进程优先级 PRI 四、地址空间的层次结构 五、虚拟地址和物理地址 一、进程创建 fork()函数创建子进程&#xff0c;若创建成功&#xff0c;则给父进程返回子进程的pid&#x…

Python基础教程:异常处理try...except语句

Python是一门非常灵活且易于学习的编程语言&#xff0c;在日常开发中被广泛应用。然而&#xff0c;由于各种原因&#xff0c;我们的代码可能会出现异常情况&#xff0c;例如输入错误、文件读写异常等等。Python异常处理是Python中重要的一部分&#xff0c;为了保证程序的稳定性…

用表格制作网页

利用表格制作网页 实验目标 该网页将利用设计页面的布局&#xff0c;制楚雄师院的页面简介。通过该种制作&#xff0c;我们可以体会到表格在布局设计中的实际运用&#xff0c;体会如何使用表格来控制页面中的元素对象&#xff0c;已达到自然&#xff0c;生动的配置构成元素…

Linux无法访问github解决方案【修改/etc/hosts文件,加上GitHub网站的IP地址】

ChatGPT神中神&#xff01; 省流&#xff1a;修改/etc/hosts文件&#xff0c;加上GitHub网站的IP地址。 "Failed connect to github.com:443; 拒绝连接" 错误通常表示你的系统无法建立与GitHub的安全连接。这可能是由于网络问题、防火墙设置或代理配置等原因引起的。…

unbuntu 22.04 安装和卸载企业微信

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 记录有关在ubuntu22.04上安装和卸载企业微信 以及企业微信无法打开问题处理 1. 正文 1.1 安装 下载wine环境 http://archive.ubuntukylin.com/softwar…

apache hudi 初见

git clone https://gitee.com/apache/Hudi.git docker pull yml 文件里面的镜像 然后 docker-compose -f docker-compose_hadoop284_hive233_spark244.yml -p 6p6 up -d 然后就是 在这里插入代码片# Licensed to the Apache Software Foundation (ASF) under one or more …

MySQL之InnoDB存储结构 | 京东物流技术团队

1 InnoDB存储引擎 InnoDB存储引擎最早由Innobase Oy公司开发&#xff08;属第三方存储引擎&#xff09;。从MySQL 5.5版本开始作为表的默认存储引擎。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎&#xff0c;特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读&…

机器学习实战 | 股票价格预测项目(深度学习初级)

目录 简介技术流程1. 载入依赖包2. 读取数据集3. 从数据集中分析价格4. 对数据排序5. 数据标准化6. 创建、训练和保存LSTM网络7. 使用LSTM模型进行股票价格预测8. 可视化预测和实际结果 完整程序 简介 准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级项目开始。…

面试题之spring源码

IOC的底层原理 &#xff1a; Spring是如何循环依赖的。&#xff08;三级缓存&#xff0c;提前曝光&#xff09;&#xff1a; 循环依赖的定义:循环依赖就是循环引用&#xff0c;也就是两个或两个以上bean对象互相持有对方&#xff0c;最终形成闭环&#xff0c;比如A依赖B,B依赖C…

文件夹加密软件怎么选?文件夹加密软件盘点

文件夹是电脑储存数据的重要工具&#xff0c;那么该如何保护文件夹的数据安全呢&#xff1f;使用合适的文件夹加密软件可能是最简单的方法。那么文件夹加密软件该怎么选呢&#xff1f; 文件夹加密超级大师 文件夹加密超级大师可以说是最全能的文件夹加密软件&#xff0c;它拥有…

自己编写chrome插件

1.首先你需要一个menifest.json文件 {"manifest_version": 3,"name": "My Extension","version": "2.0","action": {"default_popup": "popup.html","default_icon": "icon.…