如何通过Spring从Java控制器向HTML传递数据?
从Spring控制器向HTML传递String值的问题排查
当然可以从Spring控制器往HTML传String值啦!你遇到的页面显示${variableName}字面量而不是实际值的问题,本质是Spring没法解析你HTML里的EL表达式,大概率是模板引擎的配置或使用方式出了问题,我给你梳理几个常见的原因和解决办法:
你可能用了纯静态HTML,没有配置模板引擎
Spring不会自动解析静态HTML文件里的${}表达式,必须使用支持EL解析的模板引擎(比如Thymeleaf、JSP)。纯HTML只能作为静态资源返回,没法接收控制器传递的变量。如果用Thymeleaf,检查依赖和页面命名空间
- 确保项目中引入了Thymeleaf依赖(Spring Boot项目直接引入
spring-boot-starter-thymeleaf即可) - 在HTML页面的
<html>标签中添加Thymeleaf命名空间:xmlns:th="http://www.thymeleaf.org" - 取值时要使用Thymeleaf的属性,比如
th:text="${variableName}",而不是直接写${variableName}。示例:<p th:text="${variableName}">默认显示文本</p>
- 确保项目中引入了Thymeleaf依赖(Spring Boot项目直接引入
如果用JSP,检查视图解析器和EL开关
- 确保配置了JSP视图解析器,比如在Spring Boot中可以在
application.properties里设置:spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp - 在JSP页面开头添加指令开启EL表达式:
<%@ page isELIgnored="false" %>,有些环境默认会禁用EL。
- 确保配置了JSP视图解析器,比如在Spring Boot中可以在
检查视图文件的位置是否正确
- Thymeleaf的模板文件默认放在
src/main/resources/templates目录下,ModelAndView里的视图名要和文件名一致(不用加.html后缀) - JSP文件要放在你配置的前缀目录下,比如上面配置的
/WEB-INF/views/
- Thymeleaf的模板文件默认放在
举个完整的Thymeleaf示例:
控制器代码:
@Controller public class GreetingController { @GetMapping("/greet") public ModelAndView showGreeting() { ModelAndView model = new ModelAndView("greeting"); model.addAttribute("message", "Hello from Spring Controller!"); return model; } }
对应的src/main/resources/templates/greeting.html:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Greeting Page</title> </head> <body> <h1 th:text="${message}">默认问候语</h1> </body> </html>
这样配置后,访问/greet就能看到控制器传递的Hello from Spring Controller!文本了。
内容的提问来源于stack exchange,提问作者Andrew Torr
相关产品推荐
相关产品推荐

