1609 字
约 5 分钟
1
Enjoy 模板引擎入门
Enjoy 模板引擎入门
1. 一句话简介
Enjoy 是 JFinal 生态中的模板引擎,由 JFinal 作者詹波(波总)开发,定位为极简、轻量的 Java 模板引擎。核心解决服务端 HTML 渲染问题:将后端数据(如用户对象)填充到模板文件中,生成动态 HTML 响应给浏览器。Enjoy 的语法以 # 为前缀(如 #(user.name) 输出变量、#include 包含片段、#if/#for 控制结构),依赖体积仅几百 KB,且不依赖 Spring Boot 官方 starter,需通过手动配置 JFinalViewResolver Bean 集成到 Spring MVC 中。
2. 什么时候使用
- ✅ 适用场景
- 追求极简依赖的项目:Enjoy 的 jar 包仅几百 KB,无任何第三方传递依赖,适合对包体积敏感的场景(如微服务镜像、嵌入式设备上的 Java 应用)。
- JFinal 生态项目:如果团队已经在使用 JFinal 框架,Enjoy 是原生配套模板引擎,零额外学习成本。
- 需要手动控制模板引擎配置:Enjoy 没有 Spring Boot starter,所有配置(模板路径、后缀、开发模式、Session 访问)都在
@Configuration类中通过代码显式完成,适合希望完全掌控集成细节的团队。 - 快速原型或小型项目:语法极简(
#(var)输出、#include包含),学习成本低,适合快速搭建带服务端渲染的页面。 - 模板文件使用
.html后缀:Enjoy 默认使用.html作为模板后缀,在 IDE 中可获得 HTML 语法高亮,对前端开发者更友好。
- ❌ 不适用/需谨慎
- Spring Boot 官方生态优先的项目:Enjoy 没有官方 starter,集成需要手动编写
JFinalViewResolver配置,且配置方式有特定顺序要求(setDevMode必须放在最前面),出错时排查成本高于有官方 starter 的引擎。 - 大型复杂模板项目:Enjoy 的指令集相对精简,缺少 FreeMarker 或 Thymeleaf 那样丰富的内置函数和宏库,处理复杂模板逻辑时表达能力有限。
- 团队以 Thymeleaf 为主要技能栈:Thymeleaf 是 Spring 官方推荐的模板引擎,社区资源、文档和人才储备远超 Enjoy,如果团队已有 Thymeleaf 经验,切换到 Enjoy 的收益不大。
- 需要严格前后端分离的场景:Enjoy 是服务端渲染引擎,不适用于 SPA(单页应用)或前后端通过 API 通信的架构。
- Spring Boot 官方生态优先的项目:Enjoy 没有官方 starter,集成需要手动编写
3. 常见业务场景
- 登录/会话管理页面:Enjoy 支持
setSessionInView(true),模板中可直接访问 Session 数据。该 demo 模块演示了完整的登录流程:未登录时跳转到登录页(page/login.html),登录后将用户信息存入 Session,首页(page/index.html)通过#(user.name)输出当前登录用户名。这种模式适用于后台管理系统的登录态控制。 - 公共模板片段复用:Enjoy 的
#include指令支持按绝对路径引入公共模板片段。该 demo 中login.html和index.html都通过#include("/common/head.html")引入页面头部,避免了重复编写<head>标签中的 meta、title 等公共内容。适用于所有需要统一页面布局(页头、页脚、导航栏)的多页面应用。 - 表单提交与数据回显:Enjoy 模板中可以直接使用
#(表达式)输出后端传递的模型数据。该 demo 中UserController接收 POST 表单提交的用户名和密码,将User对象添加到ModelAndView中,模板通过#(user.name)回显用户名。适用于用户注册、信息编辑、配置管理等表单类页面。 - 重定向与视图路由:Enjoy 的
JFinalViewResolver支持 Spring MVC 标准的redirect:前缀。该 demo 中IndexController在检测到用户未登录时返回redirect:/user/login,登录成功后返回redirect:/,实现了页面间的流程跳转。适用于需要登录拦截、操作后跳转等路由控制的多页面 Web 应用。 - 开发模式下的热加载模板:Enjoy 通过
setDevMode(true)开启开发模式,模板文件修改后即时生效,无需重启应用。该 demo 在EnjoyConfig中将此配置放在最前面。适用于开发阶段需要频繁调整页面样式的场景,可显著提升开发效率。
4. 同类技术对比
| 对比维度 | Enjoy | FreeMarker | Thymeleaf | Beetl |
|---|---|---|---|---|
| 出品方 | JFinal 生态(詹波) | Apache 基金会 | Spring 官方 | 闲大赋(个人开源) |
| 依赖体积 | 极小(~几百 KB) | 中等(~2 MB) | 较大(~3 MB+) | 中等(~1 MB) |
| Spring Boot 集成 | 无官方 starter,需手动配置 JFinalViewResolver |
官方 starter:spring-boot-starter-freemarker |
官方 starter:spring-boot-starter-thymeleaf |
第三方 starter:beetl-framework-starter |
| 语法风格 | #(var) 输出、#include、#if/#for 指令 |
${var} 输出、<#include>、<#if> 指令 |
th:text="${var}" HTML 属性模式 |
${var} 输出、<% include %> 混合风格 |
| 模板后缀 | .html |
.ftl |
.html |
.btl(可配置) |
| 学习成本 | 低(指令少、语法一致) | 中(指令集丰富) | 中(需理解属性模式) | 低(语法直观) |
| 开发模式热加载 | 支持(setDevMode(true)) |
支持(spring.freemarker.cache=false) |
支持(spring.thymeleaf.cache=false) |
支持 |
| 社区生态 | 较小(JFinal 生态为主) | 大(Apache 项目,文档丰富) | 大(Spring 官方推荐,社区最活跃) | 中等(国内社区活跃) |
| 适用规模 | 小型项目、快速原型 | 中大型项目 | 中大型项目、Spring 生态项目 | 中小型项目 |
选型建议:如果项目基于 Spring Boot 且团队无特殊偏好,优先选择 Thymeleaf——它是 Spring 官方推荐的模板引擎,集成最便捷、社区资源最丰富。如果团队熟悉 FreeMarker 或有遗留系统迁移需求,FreeMarker 是成熟稳定的选择,指令集丰富,适合复杂模板逻辑。如果追求极致轻量和极简语法,且项目规模不大,Enjoy 或 Beetl 都是优秀的国产选择——Enjoy 更轻(几百 KB)、语法更统一(全部以 # 开头),Beetl 功能更全、性能更高。Enjoy 特别适合 JFinal 生态项目或希望手动掌控集成细节的团队。
评论
0 条
还没有评论,先写一条吧。