Enjoy 模版引擎
简介
Enjoy Template Engine 重新定义模板引擎
Enjoy Template Engine 采用独创的 DKFF (Dynamic Key Feature Forward)词法分析算法以及独创的 DLRD (Double Layer Recursive Descent)语法分析算法,极大减少了代码量,降低了学习成本,并提升了用户体验。
与以往任何一款 java 模板引擎都有显著的不同,极简设计、独创算法、极爽开发体验
Enjoy 模板引擎专为 java 开发者打造,所以坚持两个核心设计理念:一是在模板中可以直接与 java 代码通畅地交互,二是尽可能沿用 java 语法规则,将学习成本降到极致。
因此,立即掌握 90% 的用法,只需要记住一句话:Enjoy 模板引擎表达式与 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 直接打通的,所以没有学习成本,剩下来只有 #if、#for、#define、#set、#include、#switch、#(...) 七个指令需要了解,而这七个指令的学习成本又极低。
Enjoy 模板引擎发布以来,得到了非常多用户的喜爱,反馈证明体验极好,强烈建议还没能尝试过的同学们试用。
tio-boot
内置 Enjoy 模版引擎,使用 Enjoy 模版引擎可以非常方便地返回网页内容。Enjoy 是 JFinal 提供的高效模板引擎,支持中文表达式、变量名、方法名及模板函数名,适合中文开发环境。
模型引擎的基础使用
添加依赖
在 pom.xml
中添加 Enjoy 模版引擎的依赖:
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>enjoy</artifactId>
<version>5.1.3</version>
</dependency>
配置 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();
// 支持模板热加载,绝大多数生产环境下也建议配置成 true,除非是极端高性能的场景
engine.setDevMode(true);
// 配置极速模式,性能提升 13%
Engine.setFastMode(true);
// JFinal 4.9.02 新增配置:支持中文表达式、中文变量名、中文方法名、中文模板函数名
Engine.setChineseExpression(true);
}
}
创建模板文件
在 src/main/resources/enjoy-templates/
目录下创建模板文件 simple_prompt.txt
:
Hello, #(name)!
Welcome to the Enjoy 模版引擎示例.
渲染模板
创建一个简单的测试类 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);
}
}
运行测试
执行上述测试类,将输出渲染后的内容:
Hello, 张三!
Welcome to the Enjoy 模版引擎示例.
通过这个基础示例,您可以了解如何配置 Enjoy 模版引擎并渲染简单的模板。接下来,可以根据项目需求扩展模板的复杂性和功能。
tio-boot 整合模版引擎
tio-boot
提供了与 Enjoy 模版引擎的无缝集成,使得在 Web 应用中渲染模板变得更加便捷。
配置 Enjoy 引擎
创建配置类 EnjoyEngineConfig
,并使用 @Configuration
和 @Bean
注解进行配置。
package com.litongjava.admin.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();
// 支持模板热加载,绝大多数生产环境下也建议配置成 true,除非是极端高性能的场景
engine.setDevMode(true);
// 配置极速模式,性能提升 13%
Engine.setFastMode(true);
// JFinal 4.9.02 新增配置:支持中文表达式、中文变量名、中文方法名、中文模板函数名
Engine.setChineseExpression(true);
return engine;
}
}
在 Controller 中使用 Enjoy 引擎
创建控制器 TemplatesController
,通过 Enjoy 引擎获取网页模板并返回。
package com.litongjava.ai.chat.AController;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import com.litongjava.jfinal.aop.Aop;
import com.litongjava.tio.http.common.HttpRequest;
import com.litongjava.tio.http.common.HttpResponse;
import com.litongjava.annotation.RequestPath;
import com.litongjava.tio.http.server.util.Resps;
@AController
@RequestPath()
public class TemplatesController {
private Engine engine = Aop.get(Engine.class);
@RequestPath("/404")
public Template notFound(HttpRequest request) {
String fileName = "/404.html";
Template template = engine.getTemplate(fileName);
return template;
}
@RequestPath("/chat")
public HttpResponse chat(HttpRequest request) {
String fileName = "/chat.html";
return renderHtml(request, fileName);
}
private HttpResponse renderHtml(HttpRequest request, String fileName) {
Template template = engine.getTemplate(fileName);
String content = template.renderToString();
HttpResponse html = Resps.html(request, content);
return html;
}
}
代码解释
上述代码包含两个主要部分:
EnjoyEngineConfig
类:- 使用
@Configuration
注解标记,表示这是一个配置类。 engine
方法创建并配置Engine
实例,设置基础模板路径、类路径源工厂、开发模式、极速模式和支持中文表达式等选项。
- 使用
TemplatesController
类:- 使用
@AController
和@RequestPath
注解,标识为处理 HTTP 请求的控制器。 notFound
方法处理/404
请求,返回/404.html
模板。chat
方法处理/chat
请求,返回/chat.html
模板。renderHtml
方法辅助渲染模板并生成 HTTP 响应。
- 使用
通过这种配置和使用方式,tio-boot
可以高效地集成 Enjoy 模版引擎,简化网页内容的返回流程。