Spring Boot中不使用模板引擎时如何通过Controller访问HTML文件?
Spring Boot 无模板引擎场景下通过 Controller 访问 HTML 的实现方案
前置准备
- 若项目中已引入 Thymeleaf、Freemarker 等模板引擎依赖,先将对应依赖从构建配置文件(
pom.xml/build.gradle)中移除 - 将需要访问的 HTML 文件放入 Spring Boot 默认静态资源目录
src/main/resources/static下,示例存放路径:src/main/resources/static/demo.html
实现方案
方案1:静态HTML直接访问(无动态内容填充需求)
直接通过 @Controller 注解的类返回 HTML 文件名即可,Spring Boot 会自动匹配静态资源目录下的对应文件:
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class StaticHtmlController { // 访问http://{域名}/demo 即可返回demo.html内容 @GetMapping("/demo") public String getDemoPage() { return "demo.html"; } }
如果不想每次写文件后缀,可以在 application.properties 中添加如下配置:
spring.mvc.view.suffix=.html
配置后上述方法直接返回 demo 即可正常匹配到文件。
方案2:动态内容填充后返回(需要通过Controller修改HTML内容)
如果需要在返回前往HTML中插入动态数据,可以先读取HTML文件内容,替换自定义占位符后再返回:
- 先在HTML文件中预设占位符,示例:
<!DOCTYPE html> <html> <body> <h1>欢迎你,${userName}</h1> <p>当前登录时间:${loginTime}</p> </body> </html>
- Controller 中处理内容替换并返回:
import org.springframework.core.io.ClassPathResource; import org.springframework.util.StreamUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; @RestController public class DynamicHtmlController { @GetMapping("/dynamic-demo") public String getDynamicPage() throws Exception { // 读取静态HTML文件内容 ClassPathResource htmlFile = new ClassPathResource("static/demo.html"); String htmlContent = StreamUtils.copyToString(htmlFile.getInputStream(), StandardCharsets.UTF_8); // 替换占位符为实际动态值 htmlContent = htmlContent.replace("${userName}", "张三") .replace("${loginTime}", LocalDateTime.now().toString()); return htmlContent; } }
注意事项
- 如果自定义了静态资源路径,需要在
application.properties中同步配置:spring.web.resources.static-locations=classpath:/你的自定义目录/ - 若项目配置了全局拦截器,需要将静态资源路径排除在拦截规则外,否则会出现404错误
- 该方案仅适合页面逻辑简单的小型项目,复杂交互场景更推荐使用模板引擎或前后端分离架构实现
内容的提问来源于stack exchange,提问作者d4vid_Bry4n
相关产品推荐
相关产品推荐

