当前位置: 首页 > article >正文

在SpringBoot中访问 static 与 templates 目录下的内容

目录

    • 步骤一:添加 Thymeleaf 依赖 (处理 Templates 目录)
    • 步骤二:配置静态资源路径 (可选但建议了解)
    • 步骤三:访问不同目录下的 HTML 文件
      • 访问 `static` 目录下的 HTML 文件
      • 访问 `templates` 目录下的 HTML 文件
    • 总结

在使用 Spring Boot 开发 Web 应用时,我们经常需要向用户展示 HTML 页面。这些 HTML 文件通常存放在 src/main/resources/staticsrc/main/resources/templates 目录下。然而,这两个目录下的文件访问方式有所不同。本篇博文将详细介绍如何配置并访问这两个目录中的 HTML 文件。

步骤一:添加 Thymeleaf 依赖 (处理 Templates 目录)

templates 目录通常用于存放视图模板,这些模板往往需要后端数据渲染。Spring Boot 推荐使用模板引擎来处理,Thymeleaf 就是其中一个流行的选择。如果你的项目需要处理 templates 下的 HTML,首先要确保添加了 Thymeleaf 依赖。

方法一:修改 pom.xml

在你的 Maven 项目的 pom.xml 文件中的 <dependencies> 部分添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

方法二:使用 Spring Initializr

如果你是通过 Spring Initializr (https://start.spring.io/) 创建项目,可以直接在依赖项(Dependencies)部分搜索并勾选 Thymeleaf

添加此依赖后,Spring Boot 会自动配置 Thymeleaf 模板引擎。

步骤二:配置静态资源路径 (可选但建议了解)

Spring Boot 默认会从几个标准位置加载静态资源,包括 classpath:/static/。通常情况下,默认配置已经够用。但如果你想明确指定或自定义静态资源的查找路径,可以在 application.propertiesapplication.yml 文件中进行配置。

application.properties 中配置:

# 指定静态资源的位置,多个路径用逗号分隔
spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

application.yml 中配置:

spring:web:resources:# 指定静态资源的位置列表static-locations:- classpath:/META-INF/resources/- classpath:/resources/- classpath:/static/- classpath:/public/

这个配置告诉 Spring Boot 在应用的类路径(classpath)下的这些目录中查找静态文件(如 HTML, CSS, JavaScript, 图片等)。

步骤三:访问不同目录下的 HTML 文件

访问 static 目录下的 HTML 文件

放置在 src/main/resources/static 目录下的文件被视为纯静态资源。访问这些文件非常简单直接:

  • 访问方式: 启动应用后,在浏览器中通过 根路径/文件名 的方式即可访问。
  • 示例: 如果在 static 目录下有一个 about.html 文件,你可以通过访问 http://<你的服务器地址>:<端口号>/about.html 来直接查看它。

访问 templates 目录下的 HTML 文件

src/main/resources/templates 目录主要用于存放需要后端处理和渲染的视图模板。

  • 直接访问限制: 通常情况下,除了 templates/index.html 可能在特定配置下作为应用的默认欢迎页(通过访问根路径 / 显示)之外,该目录下的其他 HTML 文件不能static 目录下的文件那样通过 根路径/文件名 直接访问。
  • 通过 Controller 访问(标准方式): 访问 templates 目录下的 HTML 文件(例如 index2.html),需要创建一个 Spring MVC Controller 来处理特定的 URL 请求,并返回对应的视图名称。

示例 Controller 代码:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller // 声明这是一个 Spring MVC 控制器
public class FirstController { // 类名建议使用大驼峰命名法// 将 HTTP GET 请求 "/testConnection" 映射到这个 hello 方法@RequestMapping("/testConnection")public String hello() {// 返回字符串 "index2.html"// 当使用 Thymeleaf 时,Spring Boot 会查找 /src/main/resources/templates/ 目录下的 index2.html 文件// 并使用 Thymeleaf 引擎进行渲染后返回给浏览器// 注意:更常见的 Thymeleaf 用法是只返回逻辑视图名 "index2",// Thymeleaf 会自动根据配置添加前缀(classpath:/templates/)和后缀(.html)。// 但为了与原始说明保持一致,这里我们返回完整的文件名。return "index2.html";}
}

工作流程:

  1. 用户在浏览器中访问 http://<你的服务器地址>:<端口号>/testConnection
  2. Spring Boot 侦测到这个请求,并根据 @RequestMapping("/testConnection") 注解,将请求分发给 FirstControllerhello() 方法。
  3. hello() 方法执行并返回字符串 "index2.html"
  4. 由于项目中引入了 spring-boot-starter-thymeleaf,Spring Boot 的视图解析器会识别这个字符串为视图模板的名称。
  5. 视图解析器(结合 Thymeleaf)会在配置的模板路径(默认为 classpath:/templates/)下查找名为 index2.html 的文件。
  6. 找到模板文件后,Thymeleaf 引擎会对其进行处理(如果模板中包含动态内容指令),并将最终渲染生成的 HTML 内容作为响应返回给浏览器。

总结

  • static 目录: 用于存放纯静态资源(HTML, CSS, JS, 图片等)。默认配置下,可以通过 /<文件名> 直接在浏览器中访问。
  • templates 目录: 用于存放视图模板(通常是 HTML 文件,可能包含动态内容)。一般需要通过 Controller 映射 URL 请求,返回逻辑视图名,由模板引擎(如 Thymeleaf)渲染后才能访问。index.html 有时可作为特殊情况下的欢迎页面。

希望这篇博文能帮助你理解和正确访问 Spring Boot 项目中不同目录下的 HTML 文件!


参考文档:

  1. 龙城桥少的 SpringBoot 如何访问templates目录下的html页面

相关文章:

在SpringBoot中访问 static 与 templates 目录下的内容

目录 步骤一&#xff1a;添加 Thymeleaf 依赖 (处理 Templates 目录)步骤二&#xff1a;配置静态资源路径 (可选但建议了解)步骤三&#xff1a;访问不同目录下的 HTML 文件访问 static 目录下的 HTML 文件访问 templates 目录下的 HTML 文件 总结 在使用 Spring Boot 开发 Web …...

游戏引擎学习第226天

引言&#xff0c;计划 我们目前的目标是开始构建“元游戏”结构。所谓元游戏&#xff0c;指的是不直接属于核心玩法本身&#xff0c;但又是游戏体验不可或缺的一部分&#xff0c;比如主菜单、标题画面、存档选择、选项设置、过场动画等。我们正在慢慢将这些系统结构搭建起来。…...

青少年编程与数学 02-016 Python数据结构与算法 22课题、并行算法

青少年编程与数学 02-016 Python数据结构与算法 22课题、并行算法 一、GPU并行计算矩阵乘法示例 二、MPI并行计算allgather操作示例 三、Python中的并行计算多线程并行计算多进程并行计算 四、SIMD并行计算SIMD并行计算示例 总结 课题摘要: 并行算法是通过同时执行多个任务或操…...

Ubuntu系统18.04更新驱动解决方法

原始是&#xff1a;ubuntu18.04里面的驱动是470&#xff0c;对应cuda11.4 现在需要更新为525&#xff0c;对应cuda为12.0 实现&#xff1a; 1、打开终端 Ctrl Alt T2、使用 lspci 命令&#xff08;快速查看显卡型号&#xff09; lspci | grep -i vga3、终端输入 ubuntu-d…...

Notepad++安装Markdown实时预览插件

具体操作 打开notepad -> 插件 -> 插件管理 -> 可用 -> “Markdown Panel” -> 安装&#xff0c;安装完成后工具栏点击"Markdown Panel"按钮。 注意&#xff1a;由于网络等原因可能安装失败 导致工具栏没出现""Markdown Panel"按钮&am…...

Mysql-视图和存储过程

视图 1.介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条…...

FreeRTOS入门与工程实践-基于STM32F103(二)(互斥量,事件组,任务通知,软件定时器,中断管理,资源管理,调试与优化)

互斥量 一、互斥量&#xff08;Mutex&#xff09;&#xff1a;解决多任务 “抢资源” 的问题 1. 是什么&#xff1f; 互斥量是一种 “任务间互斥访问资源” 的工具&#xff0c;本质是一个 只能被锁定&#xff08;0&#xff09;或释放&#xff08;1&#xff09;的二进制信号量…...

stm32面试

数据结构相关问题 stm32面试 数据结构相关问题 目录基础数据结构树与图排序与查找算法 Linux相关问题Linux系统基础Linux命令与脚本Linux网络与服务 操作系统相关问题操作系统基础概念操作系统调度算法操作系统同步与通信 STM32相关问题STM32硬件基础STM32编程与开发STM32应用与…...

202524 | 分布式事务

分布式事务&#xff08;Distributed Transaction&#xff09; 分布式事务是指跨多个数据库、服务或系统节点的事务操作&#xff0c;要求所有参与方要么全部成功提交&#xff0c;要么全部回滚&#xff0c;保证数据一致性。 1. 为什么需要分布式事务&#xff1f; 在单体应用中&…...

Python 企业级架构实战(上篇)

深入企业级系统设计与高可用架构,掌握构建可扩展 Python 系统的核心技能。 41. 微服务架构设计与 FastAPI 实现 多服务协同开发示例 # 用户服务 (user_service/main.py) from fastapi import FastAPI app = FastAPI() users_db = { 1: {"id": 1, "name&…...

在 macOS 上修改 最大文件描述符限制(Too many open files) 和 网络端口相关参数 需要调整系统级配置的详细步骤

在 macOS 上修改 最大文件描述符限制&#xff08;Too many open files&#xff09; 和 网络端口相关参数 需要调整系统级配置。以下是详细步骤&#xff1a; 在 macOS 上修改 最大文件描述符限制&#xff08;Too many open files&#xff09; 和 网络端口相关参数 需要调整系统级…...

Python 文本和字节序列(字符问题)

本章将讨论下述话题&#xff1a; 字符、码位和字节表述 bytes、bytearray 和 memoryview 等二进制序列的独特特性 全部 Unicode 和陈旧字符集的编解码器 避免和处理编码错误 处理文本文件的最佳实践 默认编码的陷阱和标准 I/O 的问题 规范化 Unicode 文本&#xff0c;进行安全的…...

通过Arduino IDE向闪存文件系统上传文件

注意&#xff1a;适用于Arduino IDE 2.0版本以上。对于Arduino IDE版本在2.0以下的请参考太极创客的教程&#xff1a;http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/spiffs/upload-files/。 1. 下载脚本文件 下载地址&#xff1a;https://github.com/earl…...

leetcode 121. Best Time to Buy and Sell Stock

题目描述 本题属于动态规划类问题。 dp数组的含义 dp[i][0]表示从第0天到第i天为止&#xff0c;处于持有股票的状态下&#xff0c;账户里的最大金额。 dp[i][1]表示从第0天到第i天为止&#xff0c;处于不持有股票的状态下&#xff0c;账户里的最大金额。 按照这个定义dp[n-…...

【Docker-13】Docker Container容器

Docker Container&#xff08;容器&#xff09; 一、什么是容器&#xff1f; 通俗地讲&#xff0c;容器是镜像的运行实体。镜像是静态的只读文件&#xff0c;而容器带有运行时需要的可写文件层&#xff0c;并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有…...

LoadableTransportInfo函数分析之RPCRT4!LOADABLE_TRANSPORT::LOADABLE_TRANSPORT初始化过程

LoadableTransportInfo函数分析 第一部分&#xff1a; RPC_STATUS LoadableTransportInfo ( IN RPC_CHAR * DllName, IN RPC_CHAR PAPI * RpcProtocolSequence, OUT TRANS_INFO * PAPI *pTransInfo ) { 。。。。。。。 pTransportInterface (*TransportLo…...

大模型预标注和自动化标注在OCR标注场景的应用

OCR&#xff0c;即光学字符识别&#xff0c;简单来说就是利用光学设备去捕获图像并识别文字&#xff0c;最终将图片中的文字转换为可编辑和可搜索的文本。在数字化时代&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术作为处理图像中文字信息的关键手段&#xff0c;其…...

Zookeeper 命令返回数据的含义

下面详细讲解这三个 Zookeeper 命令返回数据的含义&#xff1a; 1. ls /path - 列出子节点 命令功能&#xff1a; 列出指定路径下的所有直接子节点名称&#xff08;不包含孙子节点&#xff09; 示例返回&#xff1a; [child1, child2, child3] 输出解析&#xff1a; 返回…...

蓝宝石狼组织升级攻击工具包,利用新型紫水晶窃密软件瞄准能源企业

网络安全专家发现&#xff0c;被称为"蓝宝石狼"&#xff08;Sapphire Werewolf&#xff09;的威胁组织正在使用升级版"紫水晶"&#xff08;Amethyst&#xff09;窃密软件&#xff0c;对能源行业企业发起复杂攻击活动。此次攻击标志着该组织能力显著提升&am…...

2025蓝桥杯python A组省赛 题解

真捐款去了&#xff0c;好长时间没练了&#xff0c;感觉脑子和手都不转悠了。 B F BF BF 赛时都写假了&#xff0c; G G G 也只写了爆搜。 题解其实队友都写好了&#xff0c;我就粘一下自己的代码&#xff0c;稍微提点个人的理解水一篇题解 队友题解 2025蓝桥杯C A组省赛 题…...

JMeter重要的是什么

重要特性 支持多种协议&#xff1a; JMeter支持对多种协议进行性能测试&#xff0c;包括HTTP、HTTPS、FTP、JDBC&#xff08;数据库&#xff09;、LDAP、JMS、SOAP、REST等。这使得它能够适应各种不同的测试场景。强大的负载模拟能力&#xff1a; JMeter能够模拟大量的虚拟用户…...

深入探索如何压缩 WebAssembly

一、初始体积&#xff1a;默认 Release 构建 我们从最基础的构建开始&#xff0c;不开启调试符号&#xff0c;仅使用默认的 release 模式&#xff1a; $ wc -c pkg/wasm_game_of_life_bg.wasm 29410 pkg/wasm_game_of_life_bg.wasm这是我们优化的起点 —— 29,410 字节。 二…...

浅谈SQL Server系统内核管理机制

浅谈SQL Server系统内核管理机制 应用环境 Microsoft Windows 10.0.19045.5487 x64 专业工作站版 22H2Microsoft SQL Server 2019 - 15.0.2130.3 (X64)SQL Server Management Studio -18.6 laster 文章目录 浅谈SQL Server系统内核管理机制数据库和文件服务器管理视图系统目录…...

关于我的服务器

最近我买了台腾讯云服务器&#xff0c;然后新手小白只会用宝塔。。。 安装完之后默认的端口是8888&#xff0c;打开面板就会提示我有风险。然后 我改了端口之后&#xff0c;怎么都打不开。 于是 学到了几句命令可以使用&#xff1a; //查看端口是否已经修改成功 cat www/se…...

vue + element-plus自定义表单验证(修改密码业务)

写一个vue组件Password.vue 没有表单验证只有3个表单项 <template><div><el-form><el-form-item label"旧密码"><el-input></el-input></el-form-item><el-form-item label"新密码"><el-input>&l…...

2025年第十八届“认证杯”数学中国数学建模网络挑战赛【BC题】完整版+代码+结果

# 问题一&#xff1a;随机森林回归from sklearn.ensemble import RandomForestRegressormodel_rf RandomForestRegressor()model_rf.fit(X_train, y_train)# 问题二&#xff1a;LSTM时间序列预测from tensorflow.keras.models import Sequentialmodel_lstm Sequential()model…...

一、小白如何用Pygame制作一款跑酷类游戏(成品展示+添加背景图和道路移动效果)

小白如何用Pygame制作一款跑酷类游戏 文章目录 小白如何用Pygame制作一款跑酷类游戏前言一、游戏最终效果展示二、创建项目并加载pygame模块1.创建项目2.下载pygame模块3. 项目结构安排 三、添加背景图和实现道路移动效果1.引入库2.窗口设置和资源加载3.游戏主循环和程序入口4.…...

基础知识:Dify 安装

官方指南:https://docs.dify.ai/zh-hans/getting-started/install-self-hosted docker & docker-compose 安装 可参考:...

关闭谷歌浏览器(Google Chrome)的自动更新可以通过以下方法实现。具体操作步骤取决于你的操作系统。

关闭谷歌浏览器&#xff08;Google Chrome&#xff09;的自动更新可以通过以下方法实现。具体操作步骤取决于你的操作系统。 1. 在 Windows 上关闭 Chrome 自动更新2. 在 macOS 上关闭 Chrome 自动更新3. 在 Linux 上关闭 Chrome 自动更新4. 注意事项1. 在 Windows 上关闭 Chro…...

【MCAL】AUTOSAR架构下基于SPI通信的驱动模块详解-以TJA1145为例

目录 前言 正文 1.TJA1145驱动代码中的SPI协议设计 1.1 对SPI Driver的依赖 1.2 对SPI配置的依赖 1.2.1 SpiExternalDevice 1.2.2 Channel_x 1.2.3 Job_x 1.2.4 Sequence N 1.2.5 Sequence M 1.2.6 Sequence L 1.2.7 小结 2.基于Vector驱动代码的SPI配置 2.1 SPI引…...