java路径问题:springboot的前段静态资源路径、java后端读取文件路径、直接访问html

Spring Boot(3) Web开发(1)静态资源处理 Spring Boot(3) Web开发(1)静态资源处理 基于spring boot 2.4.3版本 1.静态资源访问 1.1 静态资源目录 把静态资源放在类路径下的以下目录:/static; /public; /resources; /META-INF/resources;这些目录作为这些静态资源的根目录,如输入http://localhost:8080/4.jpg可直接访问 过程:请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应4 阅读详情
AI摘要

本文详细解析了SpringBoot中相对路径与绝对路径的区别,web项目前端静态资源的路径配置方法,以及静态文件路径的多种配置方式,包括如何访问项目内外的文件。

路径问题!路径问题!路径问题!

这个问题坑我两次了,这次必须整理一下。杜绝在此入坑,也祝各位码农们出坑。

不过需要说的地方还挺多的,我尽量精简着说。

 

来,TMD走起。

 

大概内容:

1、相对路径和绝对路径

2、springboot项目web中前段静态资源的路径配置

3、静态文件路径配置(包括java后端读取文件路径)

 

走:

一、相对路径和绝对路径(简单一说)

绝对路径:绝对路径就是完整的路径。如:F:\workspace\idea\diamond

相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。如:idea\diamond

提一下,斜杠“/”和反斜杠“\”:

    在 java 中,文件的路径一般用 /
    如果是 windows 系统环境,那么路径一般使用 \,但是 \ 又需要转义,所以我们会看到很多使用 \\ 的情况
    windows 系统也可以使用 /,混用 \\ 和 / 也是可以的
    如果是 linux、unix 或 macOS 等系统,路径一般用 /
    总结:由于 / 在不同系统环境中都可以生效,所以最好使用这个。

二、web中前段静态资源的路径配置(springboot为例)

先来一段配置代码,以yml为例。(properties相同,只是回车换位点.了而已)

spring:
  thymeleaf:
    mode: HTML5
    encoding: UTF-8
    suffix: .html
    prefix: classpath:/templates/
    cache: false
    servlet:
      content-type: text/html
  mvc:
    static-path-pattern: /static/** #添加后静态资源必须以/static开头

目录结构:

1、配置controller返回html的前缀后缀
   配置文件中的“ suffix: .html ”是来配置controller中返回值得后缀;

                           “prefix: classpath:/templates/”是配置前缀,也是配置返回值的起始路径的。

如上配置,则controller返回值如果为字符串“hello"的话,就相当于返回了,classpath:/templates/hello.html,控制层会找到这个文件并返回给前段。

2、前段静态资源路径格式配置。(这里管的是静态资源路径啊)

spring:
  mvc:
    static-path-pattern: /static/** #添加后静态资源必须以/static开头

配制了static-path-pattern: /static/**之后,前段资源的路径必须以static开头才能访问到,如下

<script src="static/layui/layui.all.js"></script>
<script src="/static/js/qrcode.js"></script>

以上两种写法(加上static/或者/static/)均可以。

当把这个配置项除掉时,则不加static进行访问。测试如下:

注释配置项:

#  mvc:
#    static-path-pattern: /static/** #添加后静态资源必须以/static开头

测试内容及结果:(加上static/或者/static/则访问不到,路径应从static下开始写)

<script src="/layui/layui.all.js"></script><!--可以反问-->
<script src="layui/layui.all.js"></script><!--可以反问-->
<script src="static/layui/layui.all.js"></script><!--不可以反问-->
<script src="/static/layui/layui.all.js"></script><!--不可以反问-->

重点来了!

三、静态文件路径配置

配置项(如下配置其实不用配置):

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

 

以上配置没有任何意义,为啥囊,往下走↓↓↓↓↓↓↓

1、spring boot默认加载文件的路径:

  1. /META-INF/resources/
  2. /resources/
  3. /static/
  4. /public/

可以从一下springboot源码看出来,

这个与我们上述配置结果是一样的,但我们不添加spring.resource.static-locations配制时,springboot默认文件加载路径就是上述4个地方,springboot会依次去4个目录下找文件。先找到为准,就不在往下找了。

那么,还要这个配置文件干啥:

当然是特殊情况存在的时候啊,对吧。

比如:

2、应用

注意:spring.resources.static-locations与spring.mvc.static-path-pattern是搭配使用的。比如spring.mvc.static-path-pattern配置为/static/**则url地址也一样要多加上static。以下①、②适用。③没去验证。

①访问项目外的文件。如:我在4个默认项后添加了“,file:C:/Users/groot/Desktop/image/”

spring:
  thymeleaf:
    mode: HTML5
    encoding: UTF-8
    suffix: .html
    prefix: classpath:/templates/
    cache: false
    servlet:
      content-type: text/html
  resources:
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:C:/Users/groot/Desktop/image/

我就可以通过浏览器输入url:http://localhost:8080/timg.jpg直接访问到C:/Users/groot/Desktop/image/下的文件了。

注意:如果前面配制了spring.mvc.static-path-pattern: /static/**的话url地址就要输入http://localhost:8080/static/timg.jpg才行。

图片存放位置:

 

②访问项目内的文件(比如不需要controller直接访问html或者图片等),还是很实用的。

实现方法:

Ⅰ 、直接把文件放在resources/static下。(springboot默认的路径)

Ⅱ、增加static-locations配置项。如,我想直接访问resources\templates下的html我就在配置项中增加了,classpath:/templates/。

spring:
  thymeleaf:
    mode: HTML5
    encoding: UTF-8
    suffix: .html
    prefix: classpath:/templates/
    cache: false
    servlet:
      content-type: text/html
  resources:
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/templates/

目录结构:

访问地址:http://localhost:8080/reportDetail.html

效果:

③java代码中获取文件地址怎么写

Ⅰ 、获取静态文件配置下的文件

配置文件中spring.resources.static-locations项直接不配。或者配置默认的4项。

读取目标文件的位置:

java代码中位置的写法和结果如下:(这里是在导出excel是输入模板的路径,其他情况下完全相同)

        params = new TemplateExportParams("\\templates\\excel\\B-N-Fuji.xls", true);//√可以读到
//        params = new TemplateExportParams("/templates/excel/B-N-Fuji.xls", true);//x读不到
//        params = new TemplateExportParams("templates/excel/B-N-Fuji.xls", true);//√可以读到

Ⅱ、获取src下的文件

竟然可以直接获取src下的文件,并且还是相对路径的写法。0.0太黑了。难道是java默认src就是根?如D:盘一样前边不需要斜杠/?没研究过。望大侠告知。

目标文件:

 

java代码中位置的写法和结果如下:(这里是在导出excel是输入模板的路径,其他情况下完全相同)

//        params = new TemplateExportParams("/excelsrc/B-N-Fuji.xls", true);//x找不到
//        params = new TemplateExportParams("\\excelsrc\\B-N-Fuji.xls", true);//x找不到
//        params = new TemplateExportParams("/src/excelsrc/B-N-Fuji.xls", true);//x找不到
        params = new TemplateExportParams("src/excelsrc/B-N-Fuji.xls", true);//√可以找到

Ⅲ、获取自定义位置的文件

     可以写绝对路径、也可以项上边配置静态文件路径一样配置好了之后,使用相对路径。就不啰嗦了。

 

 

 

spring boot基础学习之(二)静态资源存放的位置?为什么该存放在这?从spring boot底层代码进行剖析(webjars) spring boot之底层代码分析,静态资源目录的位置以及它们的优先级顺序,webjars 阅读详情

相关推荐

DP链路训练从HPD触发到通道对齐:原理与调试实战

高速数字接口的稳定工作依赖物理层信号的精确协商,链路训练正是DisplayPort接口中确保源端与接收端在速率、摆幅和时序上达成一致的关键机制。HPD作为链路状态变化的触发信号,与通道对齐一同构成了训练流程的首尾环节。理解从时钟恢复到均衡再到多通道对齐的完整过程,有助于快速定位显示异常问题。在工程实践中,借助DPCD寄存器交互和AUX通道日志,可以系统性地排查训练失败原因。围绕链路训练全流程进行剖析,重点探讨HPD触发机制、训练图案选择、寄存器配置以及链路降级策略,为显示方案开发与调试提供工程参考。

weixin_30110543的博客 234

spring boot加载绝对路径下的静态资源文件

由于现在绝大部分的项目都是前后端分离。前端项目和后端项目分开来开发,并且后台开发一般都使用spring boot进行,所以在后台开发的时候可以通过配置spring boot中这两个配置项,来达到访问静态资源的目的,由于spring boot内置了tomcat,所以可以不用像使用传统的web项目一样把项目发布到一个tomcat容器中,而是直接执行启动类。 spring.mvc.static-pa...

非衣鲲化的博客 1677

通达信筹码分布主图源码分享

NOTEXT下区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_94,XA_94)),DRAWNULL),DOTLINE,COLORYELLOW;NOTEXT上区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_81,XA_81)),DRAWNULL),DOTLINE,COLORRED;FFG1:DRAWBAND(C线,RGB(255,0,0),XA_33,RGB(255,0,0));

zhibiaogong的博客 3357

SpringBoot获取项目文件的绝对路径和相对路径

SpringBoot获取项目文件的绝对路径和相对路径

刘大猫 2万+

国宇测试盒GH7009 SPI读操作全解析:从接线到代码实现的避坑指南

本文详细解析了国宇GH7009测试盒进行SPI读操作的完整流程与避坑要点。重点阐述了硬件连接中IO2时序控制引脚的关键作用,提供了从接线方案、电源处理到上位机代码实现的实战指南,并针对常见的数据不稳定、特定寄存器读取失败等问题给出了具体解决方案。

dapp9builder的博客 223

螺丝锁付系统软件设计 C# Winform

视觉螺丝锁付系统软件设计 C# Winform ,这是其中通信子模块设计

weixin_42522973的博客 340

SpringBoot入门

SpringBoot入门 SpringBoot简介 spring boot是一种全新的Java web框架,目的是简化Spring应用的初始搭建和开发过程,让开发者写更少的配置,程序更快的启动和运行,致力于成为快速开发应用领域的领导者。 从它的名字也可以看出,更像是一个引导程序,就跟我们傻瓜式的安装电脑软件一样,next,next...很快我们就可以搭建起一个Spring应用。 Spring产生背...

weixin_30237281的博客 121

AUTOSAR汽车电子嵌入式编程精讲300篇-基于加密算法的车载CAN总线安全通信

随着科学技术的不断更新和社会文明的不断进步,汽车已经走入寻常百姓家, 成为当代社会必不可少的交通工具。伴随着互联网技术的飞速发展,汽车也不再 是一个简单的交通工具,已经逐渐发展成为一个集出行、通信、娱乐等功能于一 身的综合智能体,进而推动了车联网产业的蓬勃发展。车联网是在传统汽车的框架上安装了传感器、执行器、控制器等分布式和集 中式控制器,使汽车具备环境感知、协同控制、优化执行等功能,并通过网络技 术实现与车外环境的信息共享,给驾驶带来方便的同时也终将成为可以替代人操 作的新一代汽车[1-3]。

getusushu的博客 2591

SpringBoot+Vue在线考试系统:1小时极速搭建与前后端分离实战

在Web开发领域,前后端分离架构已成为构建现代应用的主流范式。其核心原理是将应用逻辑拆分为独立的前端展示层与后端数据服务层,通过HTTP API(如RESTful)进行通信,实现了关注点分离与开发效率的提升。这种架构模式的技术价值在于提升了系统的可维护性、可扩展性,并允许前后端技术栈独立演进。它广泛应用于管理系统、电商平台、在线教育等需要复杂交互与清晰职责划分的场景。本文聚焦于一个典型的实战案例——在线考试系统,深入解析如何组合SpringBoot、Vue.js、MyBatis-Plus与MySQL等技术栈

weixin_30797199的博客 540

Docker:快速部署 Temporal 工作流引擎的技术指南

Temporal是一个开源的分布式工作流引擎,适用于复杂业务流程(如订单处理、支付流程等),提供状态持久化、自动重试、多语言SDK支持等特性。部署简单,支持Docker Compose,包含核心服务、Web UI及数据库。以TypeScript为例,开发者可快速编写工作流(如订单处理)和Worker,通过CLI或SDK启动和管理。Temporal简化了分布式系统的可靠性设计,适合电商、自动化任务等场景。

木头 641

ThingsBoard教程(十六):RPC部件的使用

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了十篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 ThingsBoard教程(七):模拟设备遥测 ThingsBoard教程(八):自定义UI T

知无涯 4580

springboot项目获取resources路径(相对路径)

参数即可获得项目相对路径。(ps:不知道是不是springboot内嵌tomcat容器的原因,用网上的request.getServletContext().getRealPath(“/”)方法获得的路径不是项目路径,而是c盘下一个tomcat目录路径)springboot文件上传保存到resources里,用。

m0_67401417的博客 3292

【PySide6拓展】初识QChart图表

在 PySide6 中,QtCharts模块提供了一系列强大的类,用于创建和管理图表。QChart是这个模块的核心类,它可以帮助开发者轻松地实现数据的可视化。本篇文章将介绍如何使用 PySide6 的QtCharts模块,并通过一个简单的示例教你如何快速引入QChart。QChart折线图柱状图饼图区域图它能够直观地呈现数据,同时支持交互功能,如缩放、拖拽和工具提示等。通过引入QChart,我们可以轻松实现数据的可视化,提升应用的交互性和用户体验。结合其他QtCharts。

m0_62599305的博客 822

Spring boot项目设置加载静态资源的路径(spring.resources.static-locations)

windows和mac配制:写法 ####静态资源 #mac下面配置 #spring.resources.staticLocations=file:///Users/joun/work/htest/dist/ #windows下配置 spring.resources.static-locations=file:D:/work/cos/vue/htest/dist

然而老干妈早就看穿了一切 3852

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Spring Boot 配置静态资源路径

Spring Boot 配置静态资源路径

qq_45917176的博客 8860

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

服务器向前端传输静态资源(Java)

在编写项目时可能会遇到一些需求,前端向后台请求静态资源(图片、JS、HTML等),JS和HTML一般是不会改变的,但是对于图片来说就可能需要后台的处理,所以我提出了两种方式来解决。 1.使用 Nginx 实现动静分离 顾名思义,就是将静态资源存储到 Nginx 服务器上,让 Nginx 去处理一些静态资源的请求,具体配置可以参考:Nginx整合Tomcat实现动静分离 2.后台服务器返回需要处理的图片 这里就以前端需要登录验证码向后台服务器请求验证码图片的需求为例: 该服务调用Google工具包Produc

淦淦淦! 867

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上传文件(图片头像)配置静态资源路径static-locations、static-path-pattern

实际开发静态资源 html、js、图片 肯定是放在各自文件夹下面的。

HD243608836的博客 2024

springboot图片的虚拟路劲设置为相对路劲:实现前端后分离都可以使用图片

springboot的虚拟路径:设置相对路径实现前后端分离都可以访问图片

weixin_54691198的博客 902

spring boot 配置绝对路径做静态资源访问

最近经常有人问起上传文件不想用第三方文件服务器,想上传到服务器硬盘里该如何读取? 其实这有N多种解决方案,比如: 1.nginx 利用alias或者root静态路径映射。 2.如果有专门为前端项目搭建node 服务的话,也可以蹭在node映射的文件夹下。 3.使用tomcat ...... 当然,这些应该是经常见到的操作了。但是如果我们的服务器没有这些配置,只启动一个java jar...

francis的博客 8180

spring-boot: 相对路径:classpath: Resource 接口: 访问资源

https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/resources.html java.net.URL classpath:类路径: 就是应用的源码路径:tomcat/webapps/应用/源码文件夹 ServletContext 遗憾的是,Java的标准java.net.UR...

jupiter_888的博客 3054

获取Spring Boot项目中文件的相对路径(附Kafka生产者配置类)

kafka生产者配置

道祖转生之重修Java 974

spring boot 读取相对路径

spring boot 读取相对路径

喵酱 2136

Spring Boot(六):如何配置静态资源的地址与访问路径

静态资源,例如HTML文件、JS文件,设计到的Spring Boot配置有两项,一是“spring.mvc.static-path-pattern”,一是“spring.resources.static-locations”,很多人都难以分辨它们之间的差异,所以经常出现的结果就是404错误,无法找到静态资源。1. “spring.mvc.static-path-pattern”spring.mvc.

甘焕的博客 9万+

SpringBoot的静态资源路径

SpringBoot关于静态资源路径映射

weixin_45066790的博客 1212
上一篇: 环境搭建常用博客、文章地址记录簿
下一篇: easypoi
grootblockchain
博客等级 码龄11年 55粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值