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 通信的架构。

3. 常见业务场景

  • 登录/会话管理页面:Enjoy 支持 setSessionInView(true),模板中可直接访问 Session 数据。该 demo 模块演示了完整的登录流程:未登录时跳转到登录页(page/login.html),登录后将用户信息存入 Session,首页(page/index.html)通过 #(user.name) 输出当前登录用户名。这种模式适用于后台管理系统的登录态控制。
  • 公共模板片段复用:Enjoy 的 #include 指令支持按绝对路径引入公共模板片段。该 demo 中 login.htmlindex.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 生态项目或希望手动掌控集成细节的团队。

Enjoy 模板引擎入门
http://clxhxhhr.top/posts/483/
作者
clxstart
发布于
2026-09-07
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。