tio-boot 整合 Enjoy 模版引擎文档
本文档详细介绍了如何在 tio-boot 框架中集成 Enjoy 模版引擎,包括引擎简介、基础使用示例、依赖添加、配置说明以及在 Controller 中的使用方法。内容深入浅出,非常适合初学者学习。
简介
Enjoy Template Engine 是一款为 Java 开发者打造的高效模版引擎。其采用了独创的 DKFF (Dynamic Key Feature Forward) 词法分析算法和 DLRD (Double Layer Recursive Descent) 语法分析算法,极大地减少了代码量、降低了学习成本,同时提升了用户体验。Enjoy 模版引擎具有如下特点:
- 极简设计:只需要掌握极少数指令(如 #if、#for、#define、#set、#include、#switch、#(...)),而表达式部分则与 Java 代码直接打通,无需额外学习新语法。
- 与 Java 完美融合:模板表达式与 Java 直接兼容,90%的用法直接源自 Java,这样大大降低了学习门槛。
- 支持中文:Enjoy 模版引擎支持中文表达式、变量名、方法名和模板函数名,非常适合中文开发环境。
- 开发体验极佳:借助独创算法,Enjoy 提供了非常顺畅的模板开发体验。
tio-boot 内置了 Enjoy 模版引擎,借助其优势,可以轻松在 Web 应用中渲染动态页面内容。
Enjoy 模版引擎概述
Enjoy 模版引擎专为 Java 开发者设计,既能在模板中直接嵌入 Java 代码,又保持了极低的学习成本。举例如下:
// 算术运算
1 + 2 / 3 * 4
// 比较运算
1 > 2
// 逻辑运算
!a && b != c || d == e
// 三元表达式
a > 0 ? a : b
// 方法调用
"abcdef".substring(0, 3)
target.method(p1, p2, pn)
在使用 Enjoy 时,你只需要关注少量指令,其余部分则直接沿用 Java 语法,使得掌握后可以快速上手开发模板应用。
Enjoy 模版引擎的基础使用
本节将介绍如何在一个简单的 Java 项目中使用 Enjoy 模版引擎,包括从添加依赖到模板渲染的整个流程。
1. 添加依赖
在项目的 pom.xml
中添加 Enjoy 模版引擎的 Maven 依赖:
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>enjoy</artifactId>
<version>5.1.3</version>
</dependency>
说明:该依赖将引入 Enjoy 模版引擎的核心库,为后续模板配置和渲染提供必要的类和方法。
2. 配置 Enjoy 引擎
创建一个配置类 EnjoyEngineConfig
,用于设置 Enjoy 模版引擎的基本参数,如模板文件的根路径、开发模式、极速模式等。
import com.jfinal.template.Engine;
public class EnjoyEngineConfig {
private final String RESOURCE_BASE_PATH = "/enjoy-templates/";
public void config() {
Engine engine = Engine.use();
engine.setBaseTemplatePath(RESOURCE_BASE_PATH);
engine.setToClassPathSourceFactory();
// 开启模板热加载,大部分生产环境建议开启,除非追求极致性能
engine.setDevMode(true);
// 配置极速模式,性能提升 13%
Engine.setFastMode(true);
// 支持中文表达式、中文变量名、中文方法名及中文模板函数名
Engine.setChineseExpression(true);
}
}
解释:
- BaseTemplatePath:指定模板文件所在的根目录,通常放在
src/main/resources
下。- ToClassPathSourceFactory:使用类路径作为模板文件的来源。
- DevMode:启用开发模式,支持模板热加载,便于开发调试。
- FastMode:极速模式可以提升性能,在大部分场景下建议开启。
- ChineseExpression:开启中文表达式支持,方便在中文开发环境中使用中文变量和方法名。
3. 创建模板文件
在项目的 src/main/resources/enjoy-templates/
目录下创建一个模板文件,例如 simple_prompt.txt
:
Hello, #(name)!
Welcome to the Enjoy 模版引擎示例.
说明:模板文件中使用
#(name)
语法来引用传入的数据变量。当渲染时,name
变量将被替换为传递的值。
4. 渲染模板
创建一个简单的测试类 EnjoyEngineConfigTest
来验证模板渲染是否正常工作。
package com.litongjava.ai.db.assistant.config;
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
public class EnjoyEngineConfigTest {
@BeforeClass
public static void beforeClass() {
new EnjoyEngineConfig().config();
}
@Test
public void testSimpleTemplateRendering() {
Engine engine = Engine.use();
Template template = engine.getTemplate("simple_prompt.txt");
Map<String, Object> values = new HashMap<>();
values.put("name", "张三");
String renderedOutput = template.renderToString(values);
System.out.println(renderedOutput);
}
}
解释:
- 使用 JUnit 的
@BeforeClass
注解确保在测试前完成 Enjoy 引擎的配置。- 通过
Engine.use()
获取引擎实例,并加载模板文件simple_prompt.txt
。- 构造一个 Map 集合,将模板变量
name
的值设置为"张三"
。- 使用
template.renderToString(values)
渲染模板,并输出最终结果。
执行测试后,输出结果如下:
Hello, 张三!
Welcome to the Enjoy 模版引擎示例.
tio-boot 整合模版引擎
tio-boot 在整合 Enjoy 模版引擎时,提供了更便捷的配置和使用方式,使得 Web 应用能够快速渲染模板并返回 HTML 内容。下面将详细介绍如何在 tio-boot 项目中进行配置和开发。
1. 配置 Enjoy 引擎
在 tio-boot 中,同样需要创建一个配置类 EnjoyEngineConfig
。利用注解(如 @AConfiguration
和 @Initialization
)可以将引擎配置为一个 Bean 供整个应用使用。
package com.litongjava.test.config;
import com.jfinal.template.Engine;
import com.litongjava.annotation.AConfiguration;
import com.litongjava.annotation.Initialization;
@AConfiguration
public class EnjoyEngineConfig {
private final String RESOURCE_BASE_PATH = "/enjoy-templates/";
@Initialization
public Engine engine() {
Engine engine = Engine.use();
engine.setBaseTemplatePath(RESOURCE_BASE_PATH);
engine.setToClassPathSourceFactory();
// 开启模板热加载,生产环境建议开启
engine.setDevMode(true);
// 配置极速模式,性能提升 13%
Engine.setFastMode(true);
// 支持中文表达式、中文变量名、中文方法名及中文模板函数名
Engine.setChineseExpression(true);
return engine;
}
}
说明:
@AConfiguration
标识这是一个配置类,方便 tio-boot 框架扫描和加载。@Initialization
注解标记的方法会在应用初始化时被执行,返回的 Engine 实例将用于后续模板渲染。
2. 在 Controller 中使用 Enjoy 引擎
通过创建控制器(如 IndexController
),我们可以在接收 HTTP 请求时,使用 Enjoy 模版引擎渲染模板,并将渲染结果作为 HTTP 响应返回给客户端。
package com.litongjava.test.controller;
import com.jfinal.kit.Kv;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import com.litongjava.annotation.RequestPath;
import com.litongjava.tio.boot.http.TioRequestContext;
import com.litongjava.tio.http.common.HttpResponse;
import com.litongjava.tio.http.server.util.Resps;
@RequestPath("/")
public class IndexController {
@RequestPath()
public HttpResponse index() {
HttpResponse response = TioRequestContext.getResponse();
return renderHtml(response, "index.html", Kv.by("url", "http://www.baidu.com"));
}
private HttpResponse renderHtml(HttpResponse response, String fileName, Kv kv) {
Engine engine = Engine.use();
Template template = engine.getTemplate(fileName);
String content = template.renderToString(kv);
HttpResponse html = Resps.html(response, content);
return html;
}
}
解释:
- IndexController:控制器类通过
@RequestPath
注解指定请求路径。- index 方法:当根路径
/
被访问时,调用该方法。- Kv.by("url", "http://www.baidu.com"):构造模板变量,将
url
变量传递给模板。- renderHtml 方法:使用 Enjoy 引擎加载模板(如
index.html
),并通过传入的变量生成最终的 HTML 内容,再利用 tio-boot 的响应工具返回给客户端。
3. 模板文件示例
在 src/main/resources/enjoy-templates/
目录下创建模板文件 index.html
,内容如下:
<html>
<body>
#(url)
</body>
</html>
说明:模板中使用
#(url)
占位符,用于在渲染时替换为实际传入的 URL 值。
4. 渲染效果
当客户端访问 http://localhost/
时,返回的 HTML 内容如下:
<html>
<body>
http://www.baidu.com
</body>
</html>
代码解释与说明
EnjoyEngineConfig 类
- 目的:初始化并配置 Enjoy 模版引擎。
- 关键设置:
- Base Template Path:指定模板文件存放目录。
- 热加载支持:开发模式下自动加载修改后的模板,无需重启应用。
- 极速模式:通过 Engine 的静态方法开启,能提升渲染性能。
- 中文支持:启用中文表达式,让开发者可以使用中文变量名和方法名。
IndexController 类
- 目的:处理 HTTP 请求,并返回经过模板引擎渲染后的 HTML 内容。
- 主要流程:
- 获取当前 HTTP 响应对象。
- 调用
renderHtml
方法,传入模板文件名和模板变量。 - 在
renderHtml
方法中,通过 Enjoy 引擎加载模板并渲染生成字符串内容。 - 利用 tio-boot 提供的工具将渲染结果封装成 HTML 响应返回。
通过这种方式,tio-boot 能够高效集成 Enjoy 模版引擎,使得开发者只需关注业务逻辑,而无需额外编写繁琐的模板解析代码。
读取目录下的文件
注意配置的 RESOURCE_BASE_PATH 和 IndexController 中的文件名称
EnjoyEngineConfig.java
package com.litongjava.test.config;
import com.jfinal.template.Engine;
import com.jfinal.template.source.FileSourceFactory;
import com.litongjava.annotation.AConfiguration;
import com.litongjava.annotation.Initialization;
@AConfiguration
public class EnjoyEngineConfig {
private final String RESOURCE_BASE_PATH = "enjoy-templates";
@Initialization
public Engine engine() {
Engine engine = Engine.use();
engine.setBaseTemplatePath(RESOURCE_BASE_PATH);
// engine.setToClassPathSourceFactory();
engine.setSourceFactory(new FileSourceFactory());
// 支持模板热加载,绝大多数生产环境下也建议配置成 true,除非是极端高性能的场景
engine.setDevMode(true);
// 配置极速模式,性能提升 13%
Engine.setFastMode(true);
// JFinal 4.9.02 新增配置:支持中文表达式、中文变量名、中文方法名、中文模板函数名
Engine.setChineseExpression(true);
return engine;
}
}
IndexController.java
package com.litongjava.test.controller;
import com.jfinal.kit.Kv;
import com.litongjava.annotation.RequestPath;
import com.litongjava.template.EnjoyTemplate;
import com.litongjava.tio.boot.http.TioRequestContext;
import com.litongjava.tio.http.common.HttpResponse;
import com.litongjava.tio.http.server.util.Resps;
@RequestPath("/")
public class IndexController {
@RequestPath()
public HttpResponse index() {
HttpResponse response = TioRequestContext.getResponse();
String content = EnjoyTemplate.renderToString("/index.html", Kv.by("url", "http://www.baidu.com"));
return Resps.html(response, content);
}
}
总结
本文档详细介绍了如何在 tio-boot 框架中整合 Enjoy 模版引擎,包括:
- 添加依赖、配置引擎、创建模板文件、以及在控制器中使用模板引擎渲染模板的具体步骤。
- 针对每一步骤都提供了详细的代码示例和说明,帮助初学者理解核心概念和关键设置。
通过学习本文档,您可以快速上手 Enjoy 模版引擎,并在 tio-boot 项目中构建高效、易维护的 Web 应用。如果您在使用过程中遇到问题,请参考更多官方文档或社区资源获取进一步帮助。