视图技术 (View Technologies)
Spring MVC 的视图解析机制是可插拔的。无论你选择使用 Thymeleaf、FreeMarker、JSP 还是其他技术,通常只需要简单的配置更改即可实现。
概览
在 Spring MVC 中,控制器(Controller)通常不会直接将响应写入输出流,而是返回一个视图名称或视图对象。ViewResolver 会根据配置将这些名称解析为具体的视图实现。
有关视图解析的更多细节,请参阅 视图解析 (View Resolution)。
安全警示
Spring MVC 应用程序的视图处于该应用程序的内部信任边界内。视图可以访问应用程序上下文中的所有 Bean。因此,不建议在模板可由外部源(如用户上传)编辑的应用环境中使用 Spring MVC 的模板支持,因为这可能带来安全隐患。
支持的技术
本章节涵盖了与 Spring MVC 集成的多种视图技术:
- Thymeleaf:现代、自然的模板引擎,强调浏览器预览。
- FreeMarker:成熟的、通用的模板引擎。
- Groovy Markup:基于 Groovy DSL 的标记模板。
- Script Views:支持 JSR-223 脚本引擎(如 JRuby, Jython)。
- Jackson/XML:直接将对象渲染为 JSON 或 XML。
- PDF/Excel:生成文档类响应。
补充教学
1. 逻辑视图名与物理视图名
- 逻辑视图名:控制器返回的字符串,如
"user/profile"。 - 物理视图名:
ViewResolver拼接后的路径,如"/WEB-INF/views/user/profile.html"。 这种解耦使得你可以轻松更换模板引擎而不必修改控制器代码。
2. 模型 (Model) 数据流转
控制器将数据注入 Model 对象。在渲染阶段,Spring 会将这些数据放入 Request 属性中。模板引擎则从 Request 作用域中提取这些数据进行渲染。
3. 选择建议
- Thymeleaf:如果是现代 Spring Boot 项目,这是首选,对 HTML5 支持极佳。
- FreeMarker:适合需要高性能生成复杂文本(不限于 HTML,如邮件)的场景。
- JSP:旧项目常见,但不建议在新项目中使用(尤其是打成 JAR 包运行的 Spring Boot 项目)。
- JSON (Jackson):构建 RESTful API 或前后端分离项目时的绝对主流。