You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件内容,替换自定义占位符后再返回:

  1. 先在HTML文件中预设占位符,示例:
<!DOCTYPE html>
<html>
<body>
    <h1>欢迎你,${userName}</h1>
    <p>当前登录时间:${loginTime}</p>
</body>
</html>
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:24:03