Skip to content

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 代码,又保持了极低的学习成本。举例如下:

在使用 Enjoy 时,只需要关注少量指令,其余部分则直接沿用 Java 语法,使得掌握后可以快速上手开发模板应用。


Enjoy 模版引擎的基础使用 ​

本节将介绍如何在一个简单的 Java 项目中使用 Enjoy 模版引擎,包括从添加依赖到模板渲染的整个流程。

1. 添加依赖 ​

在项目的 pom.xml 中添加 Enjoy 模版引擎的 Maven 依赖:

xml
<dependency>
  <groupId>com.jfinal</groupId>
  <artifactId>enjoy</artifactId>
  <version>5.1.3</version>
</dependency>

说明:该依赖将引入 Enjoy 模版引擎的核心库,为后续模板配置和渲染提供必要的类和方法。

2. 配置 Enjoy 引擎 ​

创建一个配置类 EnjoyEngineConfig,用于设置 Enjoy 模版引擎的基本参数,如模板文件的根路径、开发模式、极速模式等。

java
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:

txt
Hello, #(name)!
Welcome to the Enjoy 模版引擎示例.

说明:模板文件中使用 #(name) 语法来引用传入的数据变量。当渲染时,name 变量将被替换为传递的值。

4. 渲染模板 ​

创建一个简单的测试类 EnjoyEngineConfigTest 来验证模板渲染是否正常工作。

java
package nexus.io.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 {

  @AopBeforeClass
  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 的 @AopBeforeClass 注解确保在测试前完成 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 供整个应用使用。

java
package nexus.io.test.config;

import com.jfinal.template.Engine;
import nexus.io.annotation.AConfiguration;
import nexus.io.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 响应返回给客户端。

java
package nexus.io.test.controller;

import com.jfinal.kit.Kv;
import com.jfinal.template.Engine;
import com.jfinal.template.Template;
import nexus.io.annotation.RequestPath;
import nexus.io.tio.boot.http.TioRequestContext;
import nexus.io.tio.http.common.HttpResponse;
import nexus.io.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
<html>
  <body>
    #(url)
  </body>
</html>

说明:模板中使用 #(url) 占位符,用于在渲染时替换为实际传入的 URL 值。

4. 渲染效果 ​

当客户端访问 http://localhost/ 时,返回的 HTML 内容如下:

html
<html>
  <body>
    http://www.baidu.com
  </body>
</html>

代码解释与说明 ​

EnjoyEngineConfig 类 ​

  • 目的:初始化并配置 Enjoy 模版引擎。
  • 关键设置:
    • Base Template Path:指定模板文件存放目录。
    • 热加载支持:开发模式下自动加载修改后的模板,无需重启应用。
    • 极速模式:通过 Engine 的静态方法开启,能提升渲染性能。
    • 中文支持:启用中文表达式,让开发者可以使用中文变量名和方法名。

IndexController 类 ​

  • 目的:处理 HTTP 请求,并返回经过模板引擎渲染后的 HTML 内容。
  • 主要流程:
    1. 获取当前 HTTP 响应对象。
    2. 调用 renderHtml 方法,传入模板文件名和模板变量。
    3. 在 renderHtml 方法中,通过 Enjoy 引擎加载模板并渲染生成字符串内容。
    4. 利用 tio-boot 提供的工具将渲染结果封装成 HTML 响应返回。

通过这种方式,tio-boot 能够高效集成 Enjoy 模版引擎,使得开发者只需关注业务逻辑,而无需额外编写繁琐的模板解析代码。


读取目录下的文件 ​

注意配置的 RESOURCE_BASE_PATH 和 IndexController 中的文件名称

EnjoyEngineConfig.java

java
package nexus.io.test.config;

import com.jfinal.template.Engine;
import com.jfinal.template.source.FileSourceFactory;
import nexus.io.annotation.AConfiguration;
import nexus.io.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

java
package nexus.io.test.controller;

import com.jfinal.kit.Kv;
import nexus.io.annotation.RequestPath;
import nexus.io.template.EnjoyTemplate;
import nexus.io.tio.boot.http.TioRequestContext;
import nexus.io.tio.http.common.HttpResponse;
import nexus.io.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 应用。如果您在使用过程中遇到问题,请参考更多官方文档或社区资源获取进一步帮助。

MIT Licensed