方式一:静态资源目录放置 index.html(最简推荐,纯静态页面)
这是 Spring Boot 默认支持、无需额外配置的方式,核心利用框架内置的静态资源映射规则,直接放置静态页面即可生效。
配置步骤
将命名为 index.html 的静态页面,放在 Spring Boot 规定的 4 个静态资源目录 中任意一个即可(优先级:/META-INF/resources/ > /resources/ > /static/ > /public/),推荐使用最常用的 src/main/resources/static/ 目录:
plaintext
src/
└── main/
└── resources/
└── static/ # 推荐目录
└── index.html # 欢迎页,命名必须是index.html
访问方式
启动项目后,直接访问项目根路径 http://localhost:8080/,框架会自动加载该 index.html。
适用场景
纯静态页面(仅 HTML/CSS/JS),无需动态数据渲染,开发最快、零配置。
方式二:模板引擎目录放置 index.xxx(动态页面,如 Thymeleaf/Freemarker)
若欢迎页需要 动态渲染数据(如从数据库获取内容、展示动态参数),需使用模板引擎(Spring Boot 主流推荐 Thymeleaf),核心是将模板文件放在框架约定的模板目录中。
核心前提
先在 pom.xml(Maven)或 build.gradle(Gradle)中引入模板引擎依赖(以 Thymeleaf 为例):
xml
<!-- Maven 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
配置步骤
将模板文件(Thymeleaf 为 index.html,Freemarker 为 index.ftl)放在 Spring Boot 模板引擎 默认目录 src/main/resources/templates/(该目录是框架约定,无需额外配置路径):
plaintext
src/
└── main/
└── resources/
└── templates/ # 模板引擎默认目录
└── index.html # Thymeleaf动态欢迎页
关键说明
- 模板文件可使用对应引擎的语法(如 Thymeleaf 的
th:text渲染动态数据); - 无需手动编写控制器,Spring Boot 会自动映射根路径
/到该模板文件; - 若同时存在「静态目录的
index.html」和「模板目录的index.html」,模板引擎的页面优先级更高(框架会优先加载动态页面)。
适用场景
需要动态数据渲染的欢迎页,如展示系统版本、当前时间、用户信息等动态内容。
方式三:@Controller 编写自定义路由(编程式配置,灵活度最高)
通过手动编写控制器方法,映射根路径 / 到指定页面,支持 自定义跳转逻辑、动态传参、指定任意页面名称 / 路径,是灵活度最高的方式,完全摆脱框架的命名 / 目录约定。
实现步骤
- 创建 Spring MVC 控制器(标注
@Controller,不可用@RestController,否则会直接返回字符串而非页面); - 编写方法映射根路径
/,通过return指定页面路径(静态页面 / 模板页面均可)。
代码示例
场景 1:跳转到模板引擎页面(推荐,支持动态传参)
java
运行
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class IndexController {
// 映射根路径 /,访问 http://localhost:8080/ 时触发
@GetMapping("/")
public String index(Model model) {
// 自定义逻辑:向页面传递动态数据
model.addAttribute("title", "Spring Boot 欢迎页");
model.addAttribute("content", "通过@Controller实现,灵活度最高");
// 返回模板引擎目录下的页面路径(无需写后缀,框架自动识别)
// 对应 src/main/resources/templates/index.html
return "index";
}
}
场景 2:跳转到静态资源目录的页面
java
运行
@Controller
public class IndexController {
@GetMapping("/")
public String index() {
// 跳转到 static 目录下的 static-index.html
// 前缀 classpath:/static/ 是框架默认,后缀可省略
return "static-index";
}
}
核心优势
- 突破框架约定:页面名称可自定义(无需是
index)、路径可自由指定; - 支持复杂逻辑:跳转前可执行数据库查询、参数校验、权限判断等;
- 灵活传参:通过
Model/ModelAndView向页面传递任意动态数据; - 可扩展:可结合拦截器、过滤器实现个性化的欢迎页逻辑(如根据用户角色展示不同欢迎页)。
适用场景
- 欢迎页需要复杂业务逻辑处理;
- 不想遵循框架的目录 / 命名约定;
- 需根据不同条件展示不同欢迎页(如多端适配、权限控制)。
三种方式核心对比 & 优先级
| 实现方式 | 核心特点 | 适用场景 | 配置复杂度 |
|---|---|---|---|
静态目录 index.html |
零配置、纯静态、速度最快 | 无动态数据的简单欢迎页 | 极低 |
模板引擎目录 index.xxx |
少量配置(仅引依赖)、支持动态渲染 | 需基础动态数据的欢迎页 | 低 |
| @Controller 自定义路由 | 完全自定义、逻辑灵活、支持复杂场景 | 需业务逻辑 / 权限控制 / 个性化的欢迎页 | 中 |
优先级规则(同一路径下多个欢迎页共存时)
@Controller 映射的 / 路径 > 模板引擎目录的 index.xxx > 静态资源目录的 index.html
关键注意事项
- 若使用方式三,控制器必须标注
@Controller,@RestController会将返回值解析为 JSON / 字符串,无法跳转到页面; - 静态资源目录的优先级是框架内置的,无需手动配置,若需修改可通过
spring.web.resources.static-locations自定义; - 模板引擎页面的目录(
templates/)是约定路径,修改需配置对应引擎的属性(如 Thymeleaf 的spring.thymeleaf.prefix); - Spring Boot 2.4+ 移除了
spring.mvc.view.prefix/suffix的默认配置,若使用 JSP 作为模板,需手动配置该属性(不推荐在 Spring Boot 中使用 JSP)。