【Java Web】-> Spring Boot -> Web 场景

SpringBoot静态资源与欢迎页
本文介绍如何在SpringBoot中配置和访问静态资源及欢迎页面。包括设置静态资源访问路径、前缀以及处理静态资源与动态请求冲突的方法。

简单功能分析

A. 静态资源访问

官方文档 中说,Spring Boot 给我们提供静态资源的目录,比如说你的图片、视频、JS、CSS文件,都可以放到文档中说的目录下,这样就可以直接访问这些资源了。
在这里插入图片描述
static 是我们用 Spring Initializr 创建的时候,自动创建的。
在这里插入图片描述
然后我们现在建立文档中说的其他文件夹。
在这里插入图片描述
最终的文件如下👇
在这里插入图片描述
现在我在这些文件夹里放几张图片。
在这里插入图片描述
然后我们来启动服务器,看看能否访问这些静态资源。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,所有的静态资源都是能被访问的。

因此,只要静态资源在类路径下/static (or /public or /resources or /META-INF/resources,那我们就可以通过访问:当前项目根路径/ + 静态资源名, 访问到静态资源。

现在我们再做一个测试。看看动态请求合静态资源重名会怎么样。
在这里插入图片描述
如果直接访问 1.png 的话,就会直接访问到对应的图片,但是现在我们定义了一个动态的请求,那么再访问相同的路径,就无法再直接访问到对应的静态资源了,而是返回的动态请求。
在这里插入图片描述
为什么会这样呢?

静态资源映射的是所有资源,/**,一个请求进来,会先去找 Controller,如果 Controller 不能处理,就会交给静态资源处理器。静态资源处理器就会在默认的几个文件夹中找,如果静态资源都没有找到,就会是 404。

所以,我们可以设置让访问静态资源都加一个前缀,静态资源是默认无前缀的。

在这里插入图片描述
通过设置 static-path-pattern ,我们可以改变访问静态资源的前缀,现在所有的静态资源都需要加一个前缀 res/ 才能访问。
在这里插入图片描述

在这里插入图片描述

同样,我们可以修改静态资源的默认访问路径,之前只能找到在默认的那几个文件夹里的静态资源,现在我们将静态资源的文件夹改成了 /pri
在这里插入图片描述

现在只有在 pri 包内的静态资源才可以被访问到。
在这里插入图片描述

我们来做个测试。
在这里插入图片描述
在这里插入图片描述
但是我们再来访问一下 pri 包下的静态资源。
在这里插入图片描述
访问成功。

如果你还需要访问更多的包,可以把路径改成下面这样👇
在这里插入图片描述
现在我们 public 包下的资源也可以访问了。
在这里插入图片描述
在这里插入图片描述

B. 欢迎页面

官方文档 中说,Spring Boot 支持静态和模板两种方式的欢迎页面,如果是静态资源,则可以将 index.html 放到静态资源路径下。第二种方式就是会在 Controller 中找 index 请求,如果找到了就将它作为欢迎页面。
在这里插入图片描述
我们可以做个测试,先在 static 中写一个 index.html。同时我们需要把这个包开放出来,因为之前我们设置了只能访问 pripublic 包。
在这里插入图片描述
在这里插入图片描述

然后我们访问一下localhost。
在这里插入图片描述
居然没有访问到欢迎页面,原因是我们在 yaml 配置文件中设置了访问的前缀。

我们现在直接把前缀也注释掉。
在这里插入图片描述
可以看到,欢迎页面被访问到了。
在这里插入图片描述
按照官方文档的解释,我们只要将 index.html 放在我们配置的静态资源的位置其实就是可以访问的。
在这里插入图片描述
在这里插入图片描述
所以说,我们可以在静态资源路径下放 index.html,可以配置静态资源的访问路径,但是不可以配置静态资源的访问前缀,否则 index.html 就不会是默认的访问页面。

<think> 我们正在分析一个包含Java版本配置、Maven编译配置、Spring Boot父项目依赖以及依赖管理的代码片段。以下代码来自引用[4],我们将逐部分解析其含义和作用。 ### 代码解析 ```xml <!-- 指定项目属性 --> <properties> <java.version>17</java.version> <!-- 指定Java版本 --> <spring-boot.version>3.1.5</spring-boot.version> <!-- 指定Spring Boot版本 --> </properties> <!-- 依赖管理配置 --> <dependencyManagement> <dependencies> <!-- 引入Spring Boot依赖管理BOM --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <!-- 使用上面定义的版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` ### 各部分作用详解 1. **`<properties>` 属性配置** - **`<java.version>17</java.version>`** 声明项目使用的 **Java版本为17**。 - *作用*:确保Maven编译器插件使用Java 17编译代码,避免因版本不匹配导致的语法错误或兼容性问题[^4]。 - *关联配置*:该属性通常被`maven-compiler-plugin`插件引用(隐式或显式),例如: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> ``` - **`<spring-boot.version>3.1.5</spring-boot.version>`** 定义 **Spring Boot的版本号**(此处为3.1.5)。 - *作用*:集中管理Spring Boot相关依赖的版本,后续通过`${spring-boot.version}`引用,避免多处硬编码版本号[^4]。 2. **`<dependencyManagement>` 依赖管理** - **引入Spring Boot BOM** ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> ``` - **`<type>pom</type>`**:声明依赖类型为POM(Project Object Model),表示引入的是依赖管理清单而非实际JAR。 - **`<scope>import</scope>`**:将`spring-boot-dependencies`中定义的依赖版本合并到当前项目的`<dependencyManagement>`中[^3][^4]。 - *作用*: 1. **统一管理依赖版本**:Spring Boot BOM预定义了数百个库(如Spring Framework、Jackson、Logback)的兼容版本,避免版本冲突[^4]。 2. **简化依赖声明**:添加Spring Boot Starter依赖(如`spring-boot-starter-web`)时无需指定版本号,自动继承BOM中的版本[^3][^4]。 ### 完整工作流程 1. **定义属性** → 2. **通过属性设置BOM版本** → 3. **BOM管理所有依赖版本** 例如添加Starter依赖时: ```xml <dependencies> <!-- 无需指定版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` `spring-boot-starter-web`的版本由BOM自动确定为`3.1.5`。 ### 最佳实践意义 1. **版本一致性**:确保所有Spring Boot组件使用相同版本,避免兼容性问题[^4]。 2. **维护便捷性**:升级Spring Boot版本只需修改`<spring-boot.version>`属性值[^4]。 3. **构建稳定性**:通过BOM机制控制传递依赖版本,减少冲突风险[^3]。 --- §§相关问题§§ 1. 如何在多模块项目中统一管理Spring Boot依赖版本? 2. 覆盖Spring Boot管理的依赖版本会有哪些风险? 3. 如何验证项目中所有Starter依赖是否使用了统一版本? 4. `spring-boot-starter-parent`与`spring-boot-dependencies`在依赖管理上有何区别? </think> ### 代码解析:Java版本、Maven编译配置与Spring Boot依赖管理 #### 1. **Java版本配置** ```xml <properties> <java.version>17</java.version> <!-- 核心配置 --> </properties> ``` - **作用**: 明确指定项目使用的 **Java版本为17**,确保: 1. Maven编译器使用Java 17语法编译代码 2. 项目运行环境强制要求Java 17+ 3. 避免因版本不匹配导致的语法错误或运行时异常[^4] - **技术意义**: 对应`maven-compiler-plugin`的隐式配置: ```xml <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>17</source> <!-- 编译源码版本 --> <target>17</target> <!-- 生成字节码版本 --> </configuration> </plugin> ``` --- #### 2. **Spring Boot父项目依赖(传统方式)** ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.5</version> <!-- 统一版本锚点 --> </parent> ``` - **作用**: 1. **统一版本管理**:自动管理所有`spring-boot-starter-*`依赖的兼容版本 2. **预置构建配置**:内置Maven插件(如打包插件、资源过滤)的优化配置 3. **简化依赖声明**:后续添加Starter依赖无需指定版本号[^3][^4] - **典型优势**: ```xml <!-- 子依赖无需版本声明 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` --- #### 3. **依赖管理配置(BOM方式)** ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <!-- 动态版本 --> <type>pom</type> <scope>import</scope> <!-- 关键声明 --> </dependency> </dependencies> </dependencyManagement> ``` - **作用**: 1. **BOM(Bill of Materials)机制**:导入Spring Boot官方预定义的兼容依赖矩阵 2. **解耦父POM**:适用于已有父项目的场景,不强制继承 3. **精细化控制**:允许覆盖特定依赖版本(如`<log4j2.version>2.20.0</log4j2.version>`)[^4] - **运作原理**: 通过`<scope>import</scope>`将BOM中的`<dependencyManagement>`合并到当前项目,实现版本统一管理[^3] --- #### 4. **版本属性动态化** ```xml <properties> <spring-boot.version>3.1.5</spring-boot.version> <!-- 集中定义 --> </properties> ... <version>${spring-boot.version}</version> <!-- 动态引用 --> ``` - **核心价值**: 1. **单点维护**:升级Spring Boot版本只需修改一处属性值 2. **多模块同步**:父模块定义属性,子模块自动继承 3. **依赖版本一致性**:确保所有Spring生态组件使用兼容版本[^4] --- ### 配置方案对比 | **方案** | 适用场景 | 优势 | 注意事项 | |-------------------------|--------------------------|------------------------------|--------------------------| | **继承starter-parent** | 全新Spring Boot项目 | 零配置开箱即用 | 强依赖父POM结构 | | **BOM依赖管理** | 已有父项目/多模块项目 | 灵活集成现有架构 | 需显式声明插件配置 | > **最佳实践**:新项目优先使用`spring-boot-starter-parent`简化配置;企业级复杂项目建议通过BOM机制实现精细化控制[^2][^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值